C : Validation in strptime

标签 c validation strptime

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", &ltm);
mktime(&ltm);
strftime(buf, sizeof(buf), "%Y-%m-%d", &ltm);
puts(buf);

上面的例子会产生下面的输出:

2011-02-31
2011-03-03

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

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

关于C : Validation in strptime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11428014/

相关文章:

R: strptime() 和 is.na() 意外的结果

c - OS X 的低级窗口 API

java - 如何使用 Spring 创建 bean 验证框架

php - 根据选择选项值在我的 sql 表中保存信息

javascript - 电话号码验证正则表达式

r - 将日期时间从字符转换为 POSIXct 对象

c - 通过传递指针的地址来初始化本地指针

c - RPN中运算符的优先级

c - 二进制到整数,需要有关此方法的建议。

Python:strptime 不匹配格式