我使用函数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);
任何正确方向的推动都会非常有帮助。 谢谢!
答案 0 :(得分:0)
您必须在致电time
之前初始化strptime
,通常是这样的:
memset(&time, 0, sizeof(struct tm));
引用man page:
原则上,此函数不初始化tm但仅存储 指定的值。这意味着tm应该在之前初始化 呼叫。不同UNIX系统之间的细节略有不同。 glibc 实现不会触及那些未明确的字段 指定,但它重新计算tm_wday和tm_yday字段if 任何年,月或日元素都会发生变化。