C:strptime中的验证

时间:2012-07-11 07:52:37

标签: c validation strptime

C中的

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

1 个答案:

答案 0 :(得分:4)

使用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);

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

2011-02-31
2011-03-03

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

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