首页 > 解决方案 > 无法设置 wxDateTime 日月年

问题描述

我正在为“许可证到期检查”尝试一个非常简单的代码。但是,尽管我将月份设置为六月,但以下位总是将我带到第一个条件,即过期。我似乎无法弄清楚问题所在。我真的很感激一些帮助。

LicDMY.LicDate = wxDateTime::Today(); 
LicDMY.TDay = wxDateTime::Today();
LicDMY.LicDate.SetYear(2019);
LicDMY.LicDate.SetMonth(wxDateTime::Jun);
LicDMY.LicDate.SetDay(30);
if(LicDMY.LicDate.IsEarlierThan(LicDMY.TDay)||LicDMY.LicDate.IsEqualTo(LicDMY.TDay))
    message = new wxStaticText(this, wxID_ANY, wxT("Expired! Renew License \n"));
else
    message = new wxStaticText(this, wxID_ANY, wxT("Welcome! \n"));

标签: c++wxwidgets

解决方案


调用wxDateTime::SetMonth(wxDateTime::Jun)将使对象在其当前日期为 31 时无效,就像在 1 月 31 日问这个问题时发生的那样。您可以交换顺序SetDay()SetMonth()调用来完成这项工作,或者最好只使用Set(30, wxDateTime::Jun, 2019)一次更改整个日期部分,甚至编写LicDate = wxDateTime(30, wxDateTime::Jun, 2019)可能更具可读性的内容。

最后,您似乎没有使用 wxWidgets 的调试工具(即使用NDEBUG定义编译您的代码),否则您会立即收到有关该问题的通知,因为您会收到断言失败并显示assert "(0 < day) && (day <= GetNumberOfDays(month, year))" failed in Set(): Invalid date in wxDateTime::Set(). 强烈建议您使用它们,这在开发过程中非常有用,并且会在您使用 wxWidgets API 时发现很多错误。


推荐阅读