7.1.3. Тип
дата-время
Тип дата-время определяется стандартным
идентификатором TDateTime и предназначен для одновременного хранения и даты,
и времени. Во внутреннем представлении он занимает 8 байт и подобно currency
представляет собой вещественное число с фиксированной дробной частью: в целой
части числа хранится дата, в дробной - время. Дата определяется как количество
суток, прошедших с 30 декабря 1899 года, а время - как часть суток, прошедших
с 0 часов, так что значение 36444,837 соответствует дате 11.10.1999 и времени
20:05. Количество суток может быть и отрицательным, однако значения меньшие
-693594 (соответствует дате 00.00.0000 от Рождества Христова) игнорируются функциями
преобразования даты к строковому типу.
Над данными типа TDateTime определены
те же операции, что и над вещественными числами, а в выражениях этого типа могут
участвовать константы и переменные целого и вещественного типов.
Для работы с датой и временем используются
подпрограммы, перечисленные в табл. 7.6.
Таблица 7.6. Подпрограммы
для работы с датой и временем
Function
Date: TDateTime;
Function
DateToStr(D:
TDateTime):
String;
Function
DateTimeToStr(D:
TDateTime):
String
;
Function
FormatDateTime
(Format:
String
;
Value: TDateTime):
String;
Function
Now: TDateTime;
Function
Time: TDateTime;
Function
TimeToStrfT:
TDateTime): String;
|
Возвращает текущую дату
Преобразует дату в строку символов
Преобразует дату и время в
строку символов
Преобразует дату и время из
параметра value в строку символов в соответствии со спецификаторами параметра
Format (см. пояснения в п. 7.3.)
Возвращает текущую дату и время
Возвращает текущее время
Преобразует время в строку
|
Более полный перечень функций преобразования
даты и времени в строку символов и обратно указан в п. 7.3.1.
Поскольку тип TDateTime совместим
с форматом вещественных чисел, можно без труда определить дату, отстоящую от
заданной на сколько-то дней вперед или назад: для этого достаточно соответственно
прибавить к заданной дате или отнять от нее нужное целое число. Например, оператор
IbOutput.Caption := DateToStr(Date
+ 21);
поместит в метку
IbOutput
дату, соответствующую текущей дате плюс 3 недели. Чуть сложнее с исчислением
времени. Например, чтобы добавить к текущему времени полтора часа, следует использовать
выражение
Time + StrToTime('1:30')
ИЛИ
Time+1.5/24
С помощью показанного ниже обработчика
bbRunciick учебной программы вы сможете ввести в строке ввода любое вещественное
число и посмотреть его интерпретацию как значение типа
TDateTime:
procedure
TfmExample.bbRunClick(Sender:
TObject) ;
{Показывает вещественное
число, введенное в строке edinput,в формате даты-времени}
var
k: Double;
begin
//Преобразуем строковый
ввод в вещественное число
try
k := StrToFloat(edinput.Text);
except
ShowMessage('Ошибка записи
вещественного числа');
edinput.SelectAll ;
Exit
end;
//Показываем результат
как дату-время
IbOutput. Caption := ForrnatDateTime
('dd.mm.yyyy hh:mm:ss',
k);
//
Возвращаем фокус ввода
в edinput
edinput.SetFocus ;
end;