c++ - coledatetime 中的值不正确

标签 c++ mfc coledatetime

我在 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。我还尝试使用 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/

相关文章:

c++ - 将派生类视为基类 - 它如何帮助我们避免编写更多代码?

c++ - 可以在 C 中强制对指针参数进行内存对齐吗?

winapi - 使用 win API 从 Win XP 操作系统检索键盘布局的语言名称

c++ - 不同线程中的postmessage和message loop

c++ - 是否可以在 C++ 中的 switch 范围之外声明变量?

c++ - C 和 C++ 中的函数 clrscr

visual-c++ - MFC:如何更改 ListCtrl 各行的颜色/粗体?

C++ 在美国日期的 COleDateTime 中 LCID 的正确用法是什么

c++ - 用 ColeDateTimeSpan 将天数减去 ColeDateTime