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

lok*_*oki 11 delphi

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

Dav*_*nan 23

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

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

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

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

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

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