coledatetime中的值不正确

时间:2013-05-21 11:27:58

标签: c++ mfc coledatetime

我在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");

并传递给ParseDateTime的{​​{1}}。

-3。我还尝试使用COleDateTime

SetDateTime

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

1 个答案:

答案 0 :(得分:3)

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

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

MSDN文档中暗示了此限制:

  

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

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

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