我在Ubuntu时区上使用dpkg-reconfigure tzdata
从UTC + 2更改为UTC + 0但运行C代码gettimeofday()仍然在之前的时区显示tz_minuteswest
和tv_sec
,即使重启后也是如此。只有在下面运行C代码后 gettimeofday()才开始显示UTC + 0时间:
#include <stdlib.h>
#include <stdio.h>
#include <sys/time.h>
int main()
{
struct timeval tv;
struct timezone tz;
setenv("TZ", "UTC", 1);
tzset();
gettimeofday(&tv, &tz);
tv.tv_sec -= 7200;
tz.tz_minuteswest = 0;
settimeofday(&tv, &tz);
gettimeofday(&tv, &tz);
printf("time: %llu, offset: %d\n",
(long long unsigned)tv.tv_sec, tz.tz_minuteswest);
}
是否有某种gcc / libc独立的时区配置?如何从shell改变整个系统的时区?
谢谢。
答案 0 :(得分:1)
GNU系统不支持使用struct timezone
来表示时区信息;这是4.3 BSD的过时功能。相反,请使用Time Zone Functions中描述的设施。