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;