使用最大日期时的COleDateTime行为

COleDateTime behaviour when using maximum date

本文关键字:COleDateTime 行为 日期      更新时间:2023-10-16

我试图理解一个ASSERT,我有当我调用

COleDateTime time;
this->m_wndDate.GetTime(time);
我的datePicker中的日期是31/12/9999(格式为DD/MM/YYYY)函数
BOOL CDateTimeCtrl::GetTime(_Out_ COleDateTime& timeDest) const

显示的是ASSERT(timeDest.GetStatus() == COleDateTime::valid); (winctrl5.cpp, line 181),但根据文档,它是一个有效的日期。

我不明白为什么会发生这种事。以前有人遇到过这个问题吗?

提前感谢!

EDIT:方法GetTime在用户更改DatePicker时被调用。

ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATE, OnDatetimechangeDate)

void WDlgRelParamVar::OnDatetimechangeDate(NMHDR* pNMHDR, LRESULT* pResult) 
{
    LPNMDATETIMECHANGE pNMDATE = (LPNMDATETIMECHANGE)pNMHDR;
    COleDateTime time;
    this->m_wndDate.GetTime(time);
    ...

看起来DateTime选择器控件在调用GetTime()时没有正确初始化。

尝试运行以下代码片段,看看它是否按预期工作:

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

您还没有提供为Date Time Picker设置输入格式的代码。您需要使用m_wndDate.SetFormat(_T("dd/MM/yyyy"));来设置格式。请注意,它是区分大小写的。所以你的格式DD/MM/YYYY是错误的