为什么strptime()在OSX和Linux上表现不同?

时间:2015-08-13 09:10:17

标签: c linux macos strptime

考虑这个程序:

#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与众不同?根据数据和当天的时间,我希望一周中的某一天能够得到很好的定义吗?

1 个答案:

答案 0 :(得分:3)

strptime的Linux(glibc)和OS X实现是不同的。来自OS X man page

  

如果格式字符串不包含足够的转换规范来完全指定        结果struct tm,未指定的tm成员保持不变。例如,如果格式是        ``%H:%M:%S'',只会修改tm_hourtm_sectm_min

glibc相比:

  

glibc实现不会触及那些未明确指定的字段,除非它重新计算tm_wdaytm_yday字段(如果年,月或日元素中的任何一个更改)。

所以,你可以说它的工作情况已经证明了。