c++ - 无法设置 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"));
解决方案
调用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 时发现很多错误。
推荐阅读
- sql - 如果给定列中的值之和不超过某个阈值,如何从数据库中的表中选择某个字段的值?
- javascript - 为什么 JSON.stringify 添加额外的“”
- ansible - 如何使用 ansible win_package 模块通过 ini 文件安装 firefox
- javascript - JavaScript 中的下划线
- excel - 偏移手动找到的范围
- .net - 在 .NET 的控制台上打印 ASCII 0x07 字符时,这会导致系统发出蜂鸣声
- go - SSE2从golang中的打包数据中提取浮点数
- angular - 无法在 fullcalendar 中使用 rrule 插件呈现重复事件
- javascript - 为什么我得到两个输出,其中一个未定义?
- c++ - 带有模块的clang无法识别导入关键字