strptime()函数无法检测到无效日期。例如:2011-02-31,2011-04-31。 此问题是否有任何其他功能或解决方法
答案 0 :(得分:4)
使用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
是1月,11
是12月。对于tm_year
,它是1900
以来的年数。在验证2月份的某一天时,请记得考虑闰年。