为什么Delphi使用double(8字节)来存储日期和时间而不是Int64(8字节)?由于双精度浮点不是精确值,我很好奇unix日期的精度和存储在Int64值中的时间将优于Delphi日期和时间的精度?
答案 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倍。
您需要谨慎考虑孤立地考虑这些类型的精度。这些类型不是孤立存在的,值的来源很重要。如果时间来自文件系统,那么这实际上将决定值的精确度。