我正在编写有关时间的小程序,但是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以避免此问题吗?
答案 0 :(得分:1)
此行为是正确的。 time_t
相对于UTC;对time_t
值执行数学运算(例如将其四舍五入到最接近的日期)将得出相对于GMT的结果。如果要相对于本地时区执行这些操作,则需要对此进行更正。
“硬件时区”与此行为无关,即使有可能,对其进行更改也不会产生任何影响。 (macOS不支持将系统时钟存储为本地时间;这只是某些较旧的Windows系统上的标准做法。)