这个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);
}
当我尝试在新tzselect
版本的bin/
目录中运行glibc
时,出现此错误:
./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
版本就无法识别正确的时区。
答案 0 :(得分:0)
我使用libc.so.6
打开了新的vi
库,并搜索了localtime
。
新glibc
版本查找localtime
的硬编码目录设置为/usr/glibc/etc
。
然后这是一项简单的任务:我运行了命令
ln -s /usr/share/zoneinfo/Europe/Vienna /usr/glibc/etc/localtime
现在,localtime
版本在新版glibc
版本中无法正确识别TZ
,而不使用null
变量。