c++ - 如何判断我的 struct tm 是否处于无效状态?

标签 c++ date time c++-chrono gettime

这是一个关于无效输入的问题,不是无效格式。例如给定以下代码:

tm bar;

foo >> get_time(&bar, "%Y-%m-%d");

cout >> bar.tm_year >> bar.tm_mon >> bar.tm_mday >> endl;

如果我定义这样就没问题:stringstream foo("2001-02-28 non-leap year"); 如果我有无效的格式,则会出现明显的错误,例如:stringstream foo("格式错误 2001-02-28 非闰年");

但我不知道如何检测我的输入是否无效,例如:

stringstream foo("2001-02-30 non-leap year");

在这种情况下,bar 可以像没有任何错误一样被读取。有什么我可以听的东西会提醒我输入无效吗?

最佳答案

由于 mktime 也尝试解释超出范围的值(即 2001-02-30 将被解释为 2001-03-01),您可以执行 mktime 后跟 localtime,如果返回不同的值,则表示原始值无效。

关于c++ - 如何判断我的 struct tm 是否处于无效状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29311412/

相关文章:

java - Android - 将日期转换为时间前,但它返回 48 年前

php - 如何获取给定城市的时间?

c++ - 按位移位,无符号字符

c++ - 与 C++ Exception throw 语句混淆

c++ - 这种回调的使用是惯用的吗?

sql - 给定另一个日期,创建该月第一天的日期的最简单方法

c++ - 在 C++ 中使用 dlsym 加载共享对象函数

java - yyyy-MM-dd hh :mm? 的 java 验证正则表达式模式是什么

mysql - 如何使用MySQL比较时间与当前时间并显示结果?

unit-testing - 我可以更改特定流程的当前日期和时间吗?