【发布时间】:2015-10-10 22:12:59
【问题描述】:
我想格式化 DEVPROP_TYPE_DATE 值。官方文档说:
“在 Windows Vista 和更高版本的 Windows 中,DEVPROP_TYPE_DATE 属性类型表示基本数据类型标识符,该标识符指示数据类型是一个 DOUBLE 类型的值,该值指定自 12 月 31 日以来的天数, 1899。例如,1900 年 1 月 1 日为 1.0;1900 年 1 月 2 日为 2.0;以此类推。”
“DEVPROP_TYPE_DATE - 日期(DATE)”
到目前为止,一切都很好!可是等等! DEVPROP_TYPE_DATE 格式类似,但不等于DATE 数据类型格式:
“DATE 类型是使用 8 字节浮点数实现的。天以整数增量表示,从 1899 年 12 月 30 日开始,午夜作为时间零。例如:1899 年 12 月 30 日,午夜是 0.00,1900 年 1 月 1 日,午夜是 2.00。"
我发现一个PDF document 说:
"DEVPROP_TYPE_DATE - 日期值。PropertyBuffer 指定一个 64 位浮点数,表示自 1899 年 12 月 31 日以来的天数(不是秒数)。例如,1 月 1 日, 1900 是 2.0,1900 年 1 月 2 日是 3.0,依此类推。PropertyBufferSize 必须设置为 8。"
在我看来有很多错别字,但我不确定。我还发现 DATE 数据类型有很长的历史和一些weirdness。有人可以帮我澄清DEVPROP_TYPE_DATE 值的正确格式是什么?
P.S.:我正在制定 B 计划以显示该值并将其与设备管理器显示的值进行比较。它并不完美,但足够接近。
【问题讨论】:
-
我怀疑该差异是因为对于短语“1900 年 1 月 1 日”是指 12 月 31 日变为 1 月 1 日的时刻还是 1 月 1 日的时刻存在分歧变为 1 月 2 日。甚至“1900 年 1 月 1 日,午夜”对我来说似乎也是模棱两可的。如果我是对的,那么差异本身就解决了歧义:1900 年 1 月 1 日开始的时刻是 1.0,而结束的时刻是 2.0。 但我只是猜测,所以如果没有人能给你一个明确的答案,请确保你自己测试一下。
-
我要测试并发布结果。谢谢@HarryJohnston!