C中的strptime()函数无法检测到无效的日期。例如: 2011-02-31,2011-04-31。这个问题还有其他的功能或解决方法吗?
发布于 2012-07-11 15:59:49
在使用strptime之后,您可以使用mktime来规范化您的结构。
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前后的字符串不匹配,那么您就知道输入的字符串不是有效的日期。
如果需要知道哪个字段无效,可以在调用mktime之前保存ltm结构的副本。然后,可以检查日(tm_mday)、月(tm_mon)或年(tm_year)是否是无效格式的日期。对于tm_mon,0是一月,11是十二月。对于tm_year,它是自1900以来的年数。请记住,在验证2月份的日期时,要考虑到闰年。
https://stackoverflow.com/questions/11428014
复制相似问题