c lang 时间问题时区不是当前的?如何更改 MacBook MacOS 硬件时区设置?

c lang time problem timezone does not current? How to change MacBook MacOS hardware timezone setting?

我正在写一个关于时间的小程序,但是 MacBook 的时区设置似乎有一些问题,我现在 系统偏好设置 中的时区是 JST(UTC+9)。

#include <time.h>
#include <stdlib.h>
#include <stdio.h>

int main (int argc, char *argv[]) {

        time_t time_in_second;
        struct tm *time_today;

        time (&time_in_second);

        time_t today_in_second = time_in_second - (time_in_second % 86400);
        time_today = gmtime(&today_in_second);  // will out put 00:00
        time_today = localtime(&today_in_second);  // will output 09:00

        printf ("year: %d\nmonth: %d\nday: %d\nhour: %d\nminuts: %d\nsecond: %d\n", \
            1900+time_today->tm_year, 1+time_today->tm_mon,\
            time_today->tm_mday, time_today->tm_hour, time_today->tm_min, time_today->tm_sec);

    return 0;
}

不应该 localtime 输出 00:00 而不是 gmtime

还是我误会了?

我该如何解决这个问题?我做了一些搜索,但我只找到了更改操作系统时区设置的方法。

我可以将硬件时区更改为 UTC 以避免此问题吗?

这种行为是正确的。 time_t是相对于UTC;对 time_t 值执行数学运算(例如将其四舍五入到最近的日期)将给出相对于 GMT 的结果。如果您想相对于当地时区执行这些操作,则需要对此进行更正。

"hardware timezone" 与此行为无关,更改它不会有任何效果,即使有可能。 (macOS 不支持将系统时钟存储为本地时间;这只是一些较旧的 Windows 系统的标准做法。)