C : 在 strptime 中验证

And*_*way 5 c validation strptime

C 中的 strptime() 函数无法检测无效日期。例如:2011-02-31、2011-04-31。此问题是否有任何其他功能或解决方法

jxh*_*jxh 5

使用后mktime,您可以使用来规范化您的结构strptime

struct tm ltm = {0};
char buf[] = "2011-02-31";
puts(buf);
strptime(buf, "%Y-%m-%d", &ltm);
mktime(&ltm);
strftime(buf, sizeof(buf), "%Y-%m-%d", &ltm);
puts(buf);
Run Code Online (Sandbox Code Playgroud)

上面的示例将产生以下输出:

2011-02-31
2011-03-03
Run Code Online (Sandbox Code Playgroud)

如果之前和之后的字符串mktime不匹配,则您知道输入字符串不是有效日期。

如果需要知道哪个字段无效,可以ltm在调用mktime. 然后,您可以检查日 ( tm_mday)、月 ( tm_mon) 或年 ( tm_year) 是否为无效格式。对于tm_mon0是一月,11是 十二月。因为tm_year,它是自 以来的年数1900。请记住在验证 2 月的月份日期时考虑闰年。