1

COleDateTime我在 MFC打了几天。我有CTime正确的价值观。正确的年、日、月、时、分和秒。我尝试了几种转换CTimeCOleDateTime

-1.我把CTime数据放到构造函数中COleDateTime

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

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

并传递给ParseDateTimeof COleDateTime

-3。我也尝试SetDateTime使用COleDateTime

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

4

1 回答 1

3

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

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

MSDN 文档中暗示了此限制:

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

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

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

于 2013-05-21T15:16:27.523 回答