【问题标题】:Delphi - Why is TDate and TDateTime the same?Delphi - 为什么 TDate 和 TDateTime 相同?
【发布时间】:2012-08-29 08:56:04
【问题描述】:

查看 System.pas 时,TDate 和 TDateTime 定义如下:

  TDateTime = type Double;

  TDate = type TDateTime;
  TTime = type TDateTime;

显然 TDate 和 TDateTime 是一样的。

我只是在使用 TDate 和 TDateTime 时遇到了困难,因为我预计 TDate 只包含日期部分而不包含时间部分。

现在我想知道:这背后的意义是什么? 当我将一个变量声明为 TDate 时,它​​应该包含一个日期,而不是一个 dat 和一个时间值。

【问题讨论】:

    标签: delphi tdatetime


    【解决方案1】:

    它们不一样。如果声明是

    TDate = TDateTime;
    TTime = TDateTime;
    

    他们曾经是一样的。加上额外的type,虽然它们在技术上仍然是相同的,即它们仍然是doubles,但它们可以被区分开来。例如,这使得可以在 Object Inspector 中为两种类型(分别为日期选择器和时间选择器)使用不同的属性编辑器,而您可以为 TDateTime 使用“日期时间”选择器。

    此外,即使不是为了这个,为不同的目的使用不同的“别名”也可能是件好事。这可能会使您的源代码更易于理解。例如,如果你这样做

    var
      StartTime: TDate;
    

    那么您知道StartTime 仅包含有关日期的信息,而不包含时间信息(除非您滥用规范)。

    【讨论】:

    • 另外,在声明 TDate 时,不能使用 TDateTime 作为实际的 var 参数。
    • 当然,TDate 和 TTime 类型存在是好的,但是当一个 TDate 包含一个日期(而不是日期和时间)并且一个 TTime 将只包含一个时间值 - 那么代码将是偶数我认为更容易理解;)。当程序员试图“滥用规范”时,编译器应该给出一个错误或至少一个警告。
    • 这不是问题所在。海报想知道为什么 TDate 类型完全保存时间信息。显然,他不想每次只需要一个日期时就必须使用 date=int(TDate) 裁剪时间信息,我认为这是一个非常合理的位置。
    • 在这方面,定义应该是:TDate = type integer;
    猜你喜欢
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多