我想看看 1970 年 1 月 1 日的 00:00:00 是否实际上对应于 0 秒,我写了以下内容:
#include <stdio.h>
#include <time.h>
int main(void) {
int year = 1970;
struct tm t = {0};
t.tm_mday = 1; // January
t.tm_year = year - 1900;
t.tm_hour = 0;
t.tm_isdst = -1;
printf("%ld\n", mktime(&t));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它给我的值为-3600。我哪里错了?
PS:使用 GCC v.10.1 进行测试。我尝试在另一个架构下使用另一个编译器,它给了我正确的值。
您提供的时间信息为mktime()本地时间,因此即使夏令时/夏令时不重要,时区也很重要。
你可以通过告诉程序你现在是 UTC 来欺骗你的程序:
$ gcc mytime.c -o mytime
$ ./mytime
28800 <-- Pacific time in the US
$ TZ=GMT0 ./mytime
0
Run Code Online (Sandbox Code Playgroud)