为什么 mktime 给我的时间少了一个小时?

Rob*_*cco 5 c mktime

我想看看 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 进行测试。我尝试在另一个架构下使用另一个编译器,它给了我正确的值。

Ste*_*edl 2

您提供的时间信息为mktime()本地时间,因此即使夏令时/夏令时不重要,时区也很重要。

你可以通过告诉程序你现在是 UTC 来欺骗你的程序:

$ gcc mytime.c -o mytime
$ ./mytime
28800          <-- Pacific time in the US
$ TZ=GMT0 ./mytime
0
Run Code Online (Sandbox Code Playgroud)