strptime()的问题

时间:2012-11-17 20:44:05

标签: c struct strptime tm

我使用函数strptime()从字符串转到struct tm。但是,当我检查字段时,有一些未填写。所以我检查了手册页,但似乎我正在做正确的事情,所以现在我不知道出了什么问题。

示例输入字符串:

Wed, 19 Oct 2005 10:59:00 GMT

strptime功能:

if(strptime(date, "%a, %d %b %Y %T %Z", &time) != NULL)

据我了解,%a是星期几,%d是月份的日子,%b是月份,%Y是年份,%T是HH:MM: SS和%Z代表GMT。

tm struct

的输出
year: 32767; month: 866041216; day: 0;
hour: 3; minute: 0; second: 37941328

代码生成输出:

printf("year: %d; month: %d; day: %d;\n",
        time.tm_year, time.tm_mon, time.tm_mday);
printf("hour: %d; minute: %d; second: %d\n",
        time.tm_hour, time.tm_min, time.tm_sec);
printf("week day: %d; year day: %d\n", time.tm_wday, time.tm_yday);

任何正确方向的推动都会非常有帮助。 谢谢!

1 个答案:

答案 0 :(得分:0)

您必须在致电time之前初始化strptime,通常是这样的:

memset(&time, 0, sizeof(struct tm));

引用man page

  

原则上,此函数不初始化tm但仅存储   指定的值。这意味着tm应该在之前初始化   呼叫。不同UNIX系统之间的细节略有不同。 glibc   实现不会触及那些未明确的字段   指定,但它重新计算tm_wday和tm_yday字段if   任何年,月或日元素都会发生变化。