Сначала вам нужно определить, что вы подразумеваете под «пустым значением TDateTime
».
Значение TDateTime
представляет собой двойное число с датой, закодированной в целой части, и временем, закодированным в дробной части. Итак, самое близкое к «нулевой дате», которое вы можете получить, это, вероятно, 0
.
Следовательно, просто проверьте ADate <> 0
, чтобы проверить, является ли дата «нулевой».
Но будьте осторожны: если вы объявите локальную переменную TDateTime
, то она не обязательно будет =0
до того, как вы присвоите ей значение. Это может быть что угодно. Разумеется, то же самое относится и к переменным типа integer
, double
, boolean
,...
Кроме того, я считаю, что TDateTime
со значением 0
кодирует дату 1899-12-30.
Наконец, отрицательные значения TDateTime
совершенно нормальны. Например, -5000
соответствует 1886-04-22
.
Я не совсем понимаю смысл вашего кода. Если вы хотите использовать 0
в качестве «неназначенного» значения (что плохо, если вас интересуют даты, близкие к 1899-12-30), почему бы просто не сделать
function IsUnassigned(ADate: TDateTime): boolean;
begin
result := ADate = 0;
end;
или, возможно (но не эквивалентно!),
function IsUnassigned(ADate: TDateTime): boolean;
begin
result := IsZero(Date);
end;
В своем ответе ain дал несколько более разумных вариантов значения «неназначенная дата».
person
Andreas Rejbrand
schedule
20.02.2013
NullDate
должна быть глобальной константой? - person Andreas Rejbrand   schedule 20.02.2013