这是一个关于无效输入的问题,不是无效格式。例如给定以下代码:
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/