【发布时间】:2010-10-12 18:08:06
【问题描述】:
我遇到了一个奇怪的问题,我的系统时钟知道这是夏令时,但 glibc 似乎不知道。这是一个最新的 Ubuntu 安装,我检查了 /etc/localtime,它有正确的转换时间,适合上周切换到 DST。
我当前正确的时区是太平洋夏令时间 (UTC-7)。当我询问我的系统我在哪个时区时,它会正确地告诉我:
$ date +%z
-0700
但是当我运行以下程序时:
#include <time.h>
#include <stdio.h>
int main() {
tzset();
printf("%lu\n", timezone);
return 0;
}
输出错误:
28800
对应于 UTC-8 或太平洋标准时间。 (不,我的环境中没有设置 TZ)
我认为 glibc 和 date 程序会从同一个来源获取他们的时区信息,但显然要么他们没有,要么我误解了 glibc 全局时区的工作原理。
那么基本问题是:
- 为什么这两个输出不同
- 如何可靠地检测来自 C 程序的系统 UTC 偏移量?
【问题讨论】: