C 中的 strptime() 函数无法检测到无效日期。例如:2011 年 2 月 31 日、2011 年 4 月 31 日。是否有任何其他功能或解决此问题的方法
问问题
10755 次
1 回答
6
您可以mktime
在使用strptime
.
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
不匹配,那么您就知道输入字符串不是有效日期。
如果您需要知道哪个字段无效,您可以ltm
在调用之前保存结构的副本mktime
。然后,您可以检查日 ( tm_mday
)、月 ( tm_mon
) 或年 ( tm_year
) 是否是无效格式。因为tm_mon
,0
是一月,11
是十二月。因为tm_year
,那是多少年以来1900
。在验证 2 月份的日期时,请记住考虑闰年。
于 2012-07-11T07:59:48.870 回答