为什么Delphi使用double来存储日期和时间而不是Int64?

时间:2018-01-16 16:28:40

标签: delphi

为什么Delphi使用double(8字节)来存储日期和时间而不是Int64(8字节)?由于双精度浮点不是精确值,我很好奇unix日期的精度和存储在Int64值中的时间将优于Delphi日期和时间的精度?

1 个答案:

答案 0 :(得分:23)

简单的解释是Delphi TDateTime类型直接映射到OLE / COM日期/时间格式。

Embarcadero选择使用现有的日期/时间表示,而不是创建另一个,并选择当时最明显的平台原生选项。

有关Windows日期/时间表示的一些有用的文章:

就精确度而言,您希望将Unix时间与TDateTime进行比较。 Unix时间对于32位或64位值都具有第二精度。对于接近历元的值,双精度具有更高的精度。一天有86,400秒,例如,在0和1之间有多个数量级的双倍值。在Unix时间精度超过TDateTime之前,你需要到188,143,673左右。

虽然你专注于类型的大小,但代表性当然至关重要。例如,如果不是将日期表示为纪元后的秒数,而是表示为纪元后的毫秒数,则Unix时间的精度将高出1000倍。当然,范围也会减少1000倍。

您需要谨慎考虑孤立地考虑这些类型的精度。这些类型不是孤立存在的,值的来源很重要。如果时间来自文件系统,那么这实际上将决定值的精确度。