gpt4 book ai didi

c++ - 如何处理 "variant time"(日期, double ,8 字节)?

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:30 24 4
gpt4 key购买 nike

我似乎找不到任何关于如何处理“变量时间”( DATE, double ,8 字节变量)的信息....我有一个变体时间“A”,其值为“41716.892329”。如果我使用“VariantTimeToSystemTime”(或“COleDateTime”)转换“A” - 我得到“2014-03-18 21:24:57”。

  • 这个变体时间是如何计算的?
  • 是否能够存储毫秒数?
  • 有什么方法可以确定变量时间是上午时间还是下午时间?

我对 AM/PM 有点困惑,因为当时我正在使用的设备设置为“09:24:57”(AM)而不是“21:24:57"(下午)。

这可能是设备 SDK 的问题,它为我提供了不正确的变量时间吗?

编辑:这是设备中时区设置不正确的问题(设置为“GMT-12:00”而不是“GMT-00:00” )

谢谢。

最佳答案

“可变时间”(DATE) 与 Excel 日期几乎相同但不完全相同。 Excel(因为它最初是与 Lotus-123 竞争)复制了 Lotus 存储日期的方式(为了与现有用户兼容)。不幸的是,Lotus 有一个错误(可能是故意的,请参阅 Joel Spolsky's blog ),这意味着 1900 年 2 月有 29 天。因此,Excel 还认为 1900 年 2 月有 29 天(仍然)。尝试将值 60 格式化为日期。但是,“可变时间”用于 OLE 自动化(不仅在 Excel 中)并已修复,因此它可以正确表示任何时间点,最初是在 1753 年 1 月 1 日和 2078 年 12 月 31 日之间(ca. 2006 ) 但现在是在 100 年 1 月 1 日和 9999 年 12 月 31 日 ( 12/05/2018 ) 之间,这样可以通过简单的(可能是两部分,见下文)获得时差减法。

Eric Lippert有一个全面的分析,但总结是:

“变量时间”是一个 double ,其中整数部分是 30dec1899 之后的天数。因此,0 是 30dec1899,而 01jan1900 实际上是 2(与复制 Lotus 并将其定义为第 1 天的 Excel 不同)并且没有 29feb1900。 十进制字符串表示 的小数部分被视为从当天 00:00:00 开始的无符号部分日期偏移量。此处措辞的意义在于,虽然在数值上 -1.75 与 -1 + -0.75 相同,但变体时间将 -1.75 视为 -1++0.75(即 之后一天的 3/4 1899 年 12 月 29 日午夜)。因此,在将负值转换为 YYYY/MM/DD HH:MM:SS 或计算涉及负值的日期差异时,必须将日期和时间部分分开处理。

关于c++ - 如何处理 "variant time"(日期, double ,8 字节)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22476192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com