c语言时间问题时区不为当前时区?如何更改MacBook MacOS硬件时区设置?

c语言时间问题时区不为当前时区?如何更改MacBook MacOS硬件时区设置?,c,macos,time.h,C,Macos,Time.h,我正在写一个关于时间的小程序,但似乎MacBook的时区设置有一些问题,我现在在系统首选项中的时区是JSTUTC+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 (&

我正在写一个关于时间的小程序,但似乎MacBook的时区设置有一些问题,我现在在系统首选项中的时区是JSTUTC+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以避免此问题吗?

此行为是正确的。时间是相对于UTC的;对时间值执行数学运算,如将其四舍五入到最近的一天,将得到相对于GMT的结果。如果要执行相对于本地时区的这些运算,则需要对此进行更正

硬件时区与此行为无关,更改它不会产生任何影响,即使可能。macOS不支持将系统时钟存储为本地时间;这只是一些旧Windows系统上的标准做法