我遇到了一个奇怪的问题,我的系统时钟知道它是夏令时,但glibc似乎没有.这是一个最新的Ubuntu安装,我检查了/ etc/localtime,它有正确的转换时间,用于上周切换到夏令时.
对我来说,目前正确的时区是太平洋夏令时(UTC-7).当我问我的系统我在哪个时区时,它正确告诉我:
$ date +%z
-0700
Run Code Online (Sandbox Code Playgroud)
但是当我运行以下程序时:
#include <time.h>
#include <stdio.h>
int main() {
tzset();
printf("%lu\n", timezone);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是错误的:
28800
Run Code Online (Sandbox Code Playgroud)
对应于UTC-8或太平洋标准时间.(不,TZ未在我的环境中设置)
我认为glibc和日期程序会从同一来源获得他们的时区信息,但显然要么他们没有,要么我误解了glibc时区全球的运作方式.
那么基本问题是:
我不认为“时区”会随着夏令时而改变。尝试“日光”变量。在我的系统上:
外部变量 timezone 包含差异(以秒为单位),
UTC 和当地标准时间之间(例如,在美国东部时间)
时区(EST),时区为5*60*60)。外部变量日光
仅当在 中指定了夏季时区调整时才为非零
TZ 环境变量。