无法设置wxDateTime日,月和年

时间:2019-02-01 00:41:35

标签: c++ wxwidgets

我正在尝试一个非常简单的“许可证到期检查”代码。但是,尽管我将月份设置为6月,但以下情况总是使我处于第一个条件,即过期。我似乎无法弄清楚问题出在哪里。我非常感谢您的帮助。

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"));

1 个答案:

答案 0 :(得分:0)

调用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的。