2013-05-21 36 views
1

我在MFC中与COleDateTime打了几天。 我有CTime正确的值。正确的年,日,月,小时,分和秒。 我尝试了一些方法来转换CTimeCOleDateTimecoledatetime中的值不正确

-1.I把CTimË数据构造的COleDateTime

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

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

并且传递给的COleDateTime

-3。此外,我试图使用的COleDateTime

之后,我得到不正确的分钟1-2分钟的值。或多或少。 我从来没有见过它,我无法在互联网上找到任何东西。每个人都说abot损失精度,但这是一秒钟,而不是一分钟。 请给我一些建议! 谢谢

回答

3

我认为这个问题是内部的COleDateTime使用浮动储存和值表示自30日的月数1899年

随着天变大的数,的精度较小的领域(如分钟)减少。例如,float可以精确地存储值1000000和0.0000001,但它不能存储1000000.0000001。它没有足够的精度。

此限制暗示MSDN文档中:

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

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

这似乎是微软可能只是设计了这个类来存储的“天”部分为整数,但嘿,那太容易了。