Delphi - Почему TDate и TDateTime одинаковы?

при поиске в System.pas TDate и TDateTime определяются следующим образом:

  TDateTime = type Double;

  TDate = type TDateTime;
  TTime = type TDateTime;

очевидно, что TDate и TDateTime одинаковы.

Я просто изо всех сил пытался работать с TDate и TDateTime, потому что я ожидал, что TDate содержит только часть даты, а не часть времени.

Теперь мне интересно: какой в ​​этом смысл? Когда я объявляю переменную как TDate, она должна содержать дату, а не дату и значение времени.


person user1619275    schedule 29.08.2012    source источник


Ответы (1)


Они не то же самое. Если бы декларации были

TDate = TDateTime;
TTime = TDateTime;

они были одинаковыми. С дополнительными type, хотя они все еще технически одинаковы, т. Е. Они все еще double, их можно отличить друг от друга. Это, например, позволяет использовать разные редакторы свойств в инспекторе объектов для двух типов (средство выбора даты и время соответственно), в то время как для TDateTime можно использовать средство выбора «дата-время».

Кроме того, даже если бы не это, было бы неплохо использовать разные «псевдонимы» для разных целей. Это может облегчить понимание вашего исходного кода. Например, если вы делаете

var
  StartTime: TDate;

то вы знаете, что StartTime содержит только информацию о дате, а не о времени (если только вы не злоупотребляете нормами).

person Andreas Rejbrand    schedule 29.08.2012
comment
Кроме того, вы не можете использовать TDateTime в качестве фактического параметра var, когда объявлен TDate. - person Uwe Raabe; 29.08.2012
comment
Конечно, хорошо, что существуют типы TDate и TTime, но когда TDate будет содержать дату (а не дату И время), а TTime будет содержать только значение времени, тогда код будет еще более простым для понимания, я думаю; ). И когда программист пытается нарушить нормы, компилятор должен выдать ошибку или хотя бы предупреждение. - person user1619275; 30.08.2012
comment
Вопрос был не в этом. Плакат недоумевает, почему тип TDate вообще содержит информацию о времени. Очевидно, он не хочет обрезать информацию о времени с помощью date=int(TDate) каждый раз, когда ему нужна только дата, что я считаю очень разумной позицией. - person Tuncay Göncüoğlu; 31.10.2014
comment
В этом отношении определение должно было быть таким: TDate = type integer; - person Tuncay Göncüoğlu; 31.10.2014