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

时间:2018-10-08 15:42:22

标签: c macos time.h

我正在编写有关时间的小程序,但是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以避免此问题吗?

1 个答案:

答案 0 :(得分:1)

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

“硬件时区”与此行为无关,即使有可能,对其进行更改也不会产生任何影响。 (macOS不支持将系统时钟存储为本地时间;这只是某些较旧的Windows系统上的标准做法。)