0

我正在使用该函数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 代表格林威治标准时间。

的输出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);

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

4

1 回答 1

1

time您必须在调用之前进行初始化strptime,通常如下所示:

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

引用手册页

原则上,此函数不会初始化 tm,而仅存储指定的值。这意味着 tm 应该在调用之前初始化。不同 UNIX 系统之间的细节略有不同。glibc 实现不会触及那些未明确指定的字段,除非它在年、月或日元素中的任何一个发生更改时重新计算 tm_wday 和 tm_yday 字段。

于 2012-11-17T22:27:44.257 回答