【发布时间】:2016-05-22 13:41:29
【问题描述】:
这个 SO 线程 Why does glibc “timezone” global not agree with system time on DST? 不是我的问题的解决方案。
我的系统有glibc 2.11.3,我为我的项目编译了glibc 2.22。我跑了make localedata/install-locales。
此 MCVE 仅在与旧的 glibc 版本链接时显示正确的时间。将其与新的 glibc 版本链接,它会显示 UTC 时间:
#include <time.h>
#include <stdio.h>
int main()
{
struct tm * tmNow;
time_t dtNow;
char sBuffer [100];
tzset();
time( &dtNow );
tmNow = localtime( &dtNow );
strftime( sBuffer, sizeof(sBuffer), "%Y-%m-%d %T", tmNow );
printf("%ld - %s\n", timezone, sBuffer);
}
当我尝试在新的glibc 版本的bin/ 目录中运行tzselect 时,我收到此错误:
./tzselect: line 171: /usr/glibc/share/zoneinfo/iso3166.tab: No such file or directory
./tzselect: time zone files are not set up correctly
它或多或少说明了一切,但目前我无法找到如何设置文件/usr/glibc/share/zoneinfo/iso3166.tab。
如何为新 glibc 版本永久设置时区?
我不想使用 TZ 变量!
更新:
使用TZ 变量不会改变任何东西。我想我没有正确配置新的glibc 版本。
更新:将现有的/usr/share/zoneinfo 系统目录复制到新的/usr/glibc/share/zoneinfo 目录中至少解决了TZ 变量的问题。但是只要不设置TZ 变量,新的glibc 版本就不能识别正确的时区。
【问题讨论】: