我遇到了一个奇怪的问题,我的系统时钟知道现在是夏令时,但 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 和日期程序会从同一来源获取它们的时区信息,但显然它们要么没有,要么我误解了 glibc 时区全局的工作方式。
那么基本的问题是:
- 为什么这两个输出不同
- 如何可靠地检测 C 程序的系统 UTC 偏移量?
最佳答案
我认为“时区”不会随着夏令时而改变。尝试“日光”变量。在我的系统上:
The external variable timezone contains the difference, in seconds, between UTC and local standard time (for example, in the U.S. Eastern time zone (EST), timezone is 5*60*60). The external variable daylight is non-zero only if a summer time zone adjustment is specified in the TZ environment variable.
关于c - 为什么 glibc "timezone"global 与夏令时的系统时间不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/635780/