我在 MFC 中与 COleDateTime
战斗了几天。
我有具有正确值的 CTime
。正确的年、日、月、小时、分钟和秒。
我尝试了几种将 CTime
转换为 COleDateTime
的方法:
-1.我把CTim
e数据放到COleDateTime
的构造函数中
COleDateTime(int nYear,int nMonth,int nDay, int nHour, int nMin,int nSec );
-2。我将 CTime
格式化为 time.Format("%m/%d/%y %H:%M:%S");
并传递给 COleDateTime
的 ParseDateTime
。
-3。我还尝试使用 COleDateTime
SetDateTime
之后,我得到了 1-2 分钟的错误值。或多或少。 我以前从未见过它,我在互联网上什么也找不到。每个人都说会失去精度,但这是一秒钟,而不是一分钟。 请给我一些建议! 谢谢
最佳答案
我认为问题在于 COleDateTime 内部使用 float 进行存储,该值表示自 1899 年 12 月 30 日以来的天数。
随着天数变大,较小字段(如分钟)的精度会降低。例如, float 可以准确存储值 1000000 和 0.0000001,但不能存储 1000000.0000001。它没有足够的精度。
MSDN 文档中暗示了此限制:
This type is also used to represent date-only or time-only values. By convention, the date 0 (30 December 1899) is used for time-only values. Similarly, the time 0:00 (midnight) is used for date-only values.
所以基本上,如果您想要一个精确的时间,请将日期设置为 1899 年 12 月 30 日。
微软似乎可以设计这个类来将“天”部分存储为整数,但是嘿,那太容易了。
关于c++ - coledatetime 中的值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16668876/