首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strptime的问题

strptime的问题
EN

Stack Overflow用户
提问于 2017-02-21 12:48:08
回答 2查看 368关注 0票数 0

我试着这样解析日期时间,

代码语言:javascript
复制
char *line = "Feb 21 20:15:58";
struct tm t;

strptime (line, "%B %d %T", &t);
printf ("%ld\n", mktime (&t));

输出是1,我是否使用了错误的时间格式?

EN

回答 2

Stack Overflow用户

发布于 2017-02-21 12:57:55

输入变量line中缺少Year

另外,来自Linux man

返回值

函数的返回值是指向此函数调用中未处理的第一个字符的指针。如果输入字符串包含的字符多于格式字符串所需的字符数,则返回值将紧跟在最后使用的输入字符之后。如果整个输入字符串被使用,则返回值指向字符串末尾的空字节。如果strptime()无法匹配所有格式字符串,因此出现错误,该函数将返回NULL。

注释

原则上,此函数不会初始化tm,而是仅存储指定的值。这意味着应该在调用之前初始化tm。

因此,除了向strptime提供year之外,还应该检查返回值,并且应该在调用函数之前初始化tm t结构。

票数 0
EN

Stack Overflow用户

发布于 2019-11-13 21:34:23

依赖于未初始化值

strptime()不会设置struct tm的所有成员。首先,只有.tm_mon, .tm_mday, .tm_hour, .tm_min, .tm_sec的相应成员会受到此格式的影响。最好先初始化所有成员。

代码语言:javascript
复制
// struct tm t;
struct tm t = {0};
strptime (line, "%B %d %T", &t);

未设置的年份

正如@Abhineet所标识的,代码应该设置年份。也许:

代码语言:javascript
复制
time_t now = time(0);
struct tm t = *localtime(&now);
strptime (line, "%B %d %T", &t);

匹配打印说明符

time_t是一些标量,通常是一个整数。它未指定为与long匹配。建议转换为宽整数类型。

代码语言:javascript
复制
printf("%lld\n", (long long) mktime(&t));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42358914

复制
相关文章

相似问题

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