首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C: strptime中的验证

C: strptime中的验证
EN

Stack Overflow用户
提问于 2012-07-11 15:52:37
回答 1查看 10.3K关注 0票数 5

C中的strptime()函数无法检测到无效的日期。例如: 2011-02-31,2011-04-31。这个问题还有其他的功能或解决方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-11 15:59:49

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

代码语言:javascript
运行
复制
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);

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

代码语言:javascript
运行
复制
2011-02-31
2011-03-03

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

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11428014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档