为什么从shell更改时区不会影响gettimeofday()甚至重启后?

时间:2015-02-06 21:44:59

标签: c ubuntu timezone gettimeofday

我在Ubuntu时区上使用dpkg-reconfigure tzdata从UTC + 2更改为UTC + 0但运行C代码gettimeofday()仍然在之前的时区显示tz_minuteswesttv_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改变整个系统的时区?

谢谢。

1 个答案:

答案 0 :(得分:1)

GNU系统不支持使用struct timezone来表示时区信息;这是4.3 BSD的过时功能。相反,请使用Time Zone Functions中描述的设施。