coledatetime值不正确

incorrect value in coledatetime

本文关键字:不正确 coledatetime      更新时间:2023-10-16

我在MFC与COleDateTime战斗了几天。我有正确值的CTime。正确的年、日、月、时、分、秒。我尝试了几种方法将CTime转换为COleDateTime:

1。我将 CTime数据放入COleDateTime的构造函数

COleDateTime(int nYear,int nMonth,int nDay, int nHour, int nMin,int nSec );

2。我将CTime格式化为time.Format("%m/%d/%y %H:%M:%S");

并传递给COleDateTimeParseDateTime

3。我也尝试使用COleDateTimeSetDateTime

之后,我得到了1-2分钟或多或少的错误值。我以前从未见过它,我在网上找不到任何东西。每个人都说损失精度,但这是一秒,不是一分钟。请给我提点建议吧!谢谢你

我认为问题在于COleDateTime内部使用浮点数进行存储,并且该值表示自1899年12月30日以来的天数。

随着天数的增加,较小字段(如分钟)的精度降低。例如,float可以准确地存储1000000和0.0000001,但是不能存储1000000.0000001。它没有足够的位精度。

这个限制在MSDN文档中有提示:

此类型也用于表示仅日期或仅时间值。按照惯例,日期0(1899年12月30日)用于仅限时间的值。类似地,时间0:00(午夜)用于仅限日期的值。

基本上,如果你想要一个精确的时间,设置日期为1899年12月30日。

似乎微软可以直接设计这个类,将"days"部分存储为整数,但是,嘿,这太简单了。