考虑这个程序:
#include <stdio.h>
#include <time.h>
int main() {
struct tm t;
strptime("2015-08-13 12:00:00", "%F %T", &t);
printf("t.tm_wday = %d\n", t.tm_wday);
return 0;
}
在OSX下,这是我获得的:
$ gcc test_strptime.c
$ ./a.out
t.tm_wday = 0
但是在Linux上,这就是我得到的:
$ gcc test_strptime.c
$ ./a.out
t.tm_wday = 4
为什么bahaviour与众不同?根据数据和当天的时间,我希望一周中的某一天能够得到很好的定义吗?
答案 0 :(得分:3)
strptime
的Linux(glibc)和OS X实现是不同的。来自OS X man page:
如果格式字符串不包含足够的转换规范来完全指定 结果
struct tm
,未指定的tm成员保持不变。例如,如果格式是 ``%H:%M:%S'',只会修改tm_hour
,tm_sec
和tm_min
。
与glibc相比:
glibc实现不会触及那些未明确指定的字段,除非它重新计算
tm_wday
和tm_yday
字段(如果年,月或日元素中的任何一个更改)。
所以,你可以说它的工作情况已经证明了。