C++ 使用最大日期时的COleDateTime行为

C++ 使用最大日期时的COleDateTime行为,c++,mfc,C++,Mfc,我试着去理解我打电话时的断言 COleDateTime time; this->m_wndDate.GetTime(time); 我的日期选择器中的日期为9999年12月31日(格式为DD/MM/YYYY) BOOL CDateTimeCtrl::GetTime(_Out_ COleDateTime& timeDest) const 正在向我显示断言(timeDest.GetStatus()==COleDateTime::valid);(winctrl5.cpp,第181行)但

我试着去理解我打电话时的断言

COleDateTime time;
this->m_wndDate.GetTime(time);
我的日期选择器中的日期为9999年12月31日(格式为DD/MM/YYYY)

BOOL CDateTimeCtrl::GetTime(_Out_ COleDateTime& timeDest) const
正在向我显示断言(timeDest.GetStatus()==COleDateTime::valid);(winctrl5.cpp,第181行)但根据文档,它是一个有效日期

我不明白为什么会这样。以前有人遇到过这个问题吗

提前谢谢

EDIT:当用户更改日期选择器时,将调用方法
GetTime

ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATE, OnDatetimechangeDate)


在调用DateTime选择器控件上的
GetTime()
时,它看起来确实没有正确初始化

请尝试运行以下代码段,以查看其是否按预期工作:

COleDateTime dt(9999, 12, 31, 23, 59, 59);
COleDateTime::DateTimeStatus st = dt.GetStatus();
ASSERT(st == COleDateTime::valid);

您尚未提供为日期时间选择器设置输入格式的代码。您需要使用
m_wndDate.SetFormat(_T(“dd/MM/yyyy”)
设置格式。请注意它是区分大小写的。因此,您的格式DD/MM/YYYY是错误的

在调用
GetTime()
时,日期时间选择器控件似乎没有正确初始化

请尝试运行以下代码段,以查看其是否按预期工作:

COleDateTime dt(9999, 12, 31, 23, 59, 59);
COleDateTime::DateTimeStatus st = dt.GetStatus();
ASSERT(st == COleDateTime::valid);


您尚未提供为日期时间选择器设置输入格式的代码。您需要使用
m_wndDate.SetFormat(_T(“dd/MM/yyyy”)
设置格式。请注意它是区分大小写的。因此,您的格式DD/MM/YYYY是错误的

谢谢您的回答,但它不起作用!默认的COleDateTime构造函数将对象设置为0(1899年12月30日午夜),因此它不需要额外的初始化。我相信问题可能是函数CDateTimeCtrl::GetTime中的SYSTEMTIME到COleDateTIme的转换。我相信您的问题与设置
CDateTimeCtrl
的格式有关,它应该是dd/MM/yyyy,而不是dd/MM/yyyy。阅读本文了解更多详细信息:仅供参考:提供代码片段只是为了确保COleDateTime按预期工作,并且没有任何问题。很抱歉,我在问题中写了DD/MM/YYYY,只是为了表明我使用的格式是天优先,以防万一,但在我的代码中,我使用的是SetFormat(_T(“DD/MM/YYYY”)).谢谢你的回答,但它不起作用!默认的COleDateTime构造函数将对象设置为0(1899年12月30日午夜),因此它不需要额外的初始化。我相信问题可能是函数CDateTimeCtrl::GetTime中的SYSTEMTIME到COleDateTIme的转换。我相信您的问题与设置
CDateTimeCtrl
的格式有关,它应该是dd/MM/yyyy,而不是dd/MM/yyyy。阅读本文了解更多详细信息:仅供参考:提供代码片段只是为了确保COleDateTime按预期工作,并且没有任何问题。很抱歉,我在问题中写了DD/MM/YYYY,只是为了表明我使用的格式是天优先,以防万一,但在我的代码中,我使用的是SetFormat(_T(“DD/MM/YYYY”))。您的时区将产生影响,因此用户确实需要在其SO配置文件中提及他们的国家。转换为UTC后,它可能不再有效,就像COleDateTime一样。您应该首先使用GetTime(LPSYSTEMTIME)重载进行检查。@HansPassant我来自巴西,所以UTC-03:00,只有当日期设置为9999年12月31日时,才会点击断言,即使在这种情况下,时区是否会影响?您是否在XP上运行?常用控件(检查清单)的版本是什么?请尝试使用DDX_DateTimeCtrl查看是否面临相同的问题。请注意CommonControls 6中有一个日期时间选择器错误。0@AndrewKomiagin我使用的是Win7、Visual studio 10,我常用控件的版本是6.0。我找不到任何关于这个bug的信息,你能给我一个链接吗?非常感谢。你的时区会有影响,所以用户真的需要在他们的个人资料中提到他们的国家。转换为UTC后,它可能不再有效,就像COleDateTime一样。您应该首先使用GetTime(LPSYSTEMTIME)重载进行检查。@HansPassant我来自巴西,所以UTC-03:00,只有当日期设置为9999年12月31日时,才会点击断言,即使在这种情况下,时区是否会影响?您是否在XP上运行?常用控件(检查清单)的版本是什么?请尝试使用DDX_DateTimeCtrl查看是否面临相同的问题。请注意CommonControls 6中有一个日期时间选择器错误。0@AndrewKomiagin我使用的是Win7、Visual studio 10,我常用控件的版本是6.0。我找不到任何关于这个bug的信息,你能给我一个链接吗?非常感谢。