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 系统的标准做法。)
我正在写一个关于时间的小程序,但是 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 系统的标准做法。)