C 中的 strptime() 函数无法检测无效日期。例如:2011-02-31、2011-04-31。 是否有任何其他功能或解决此问题的方法
最佳答案
在使用strptime
之后,您可以使用mktime
规范化您的结构。
struct tm ltm = {0};
char buf[] = "2011-02-31";
puts(buf);
strptime(buf, "%Y-%m-%d", <m);
mktime(<m);
strftime(buf, sizeof(buf), "%Y-%m-%d", <m);
puts(buf);
上面的例子会产生下面的输出:
2011-02-31
2011-03-03
如果 mktime
前后的字符串不匹配,那么您就知道输入的字符串不是有效日期。
如果您需要知道哪个字段无效,可以在调用mktime
之前保存ltm
结构的副本。然后,您可以检查日期 (tm_mday
)、月份 (tm_mon
) 或年份 (tm_year
) 是否为无效格式.对于 tm_mon
,0
是一月,11
是十二月。对于 tm_year
,它是自 1900
以来的年数。请记住在验证 2 月的日期时考虑闰年。
关于C : Validation in strptime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11428014/