新版本的 glibc returns 错误的时区
new version of glibc returns wrong timezone
这个 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
。
如何永久设置 new glibc
版本的时区?
我不想使用 TZ 变量!
更新:
使用 TZ
变量不会改变任何东西。我想我没有正确配置新的 glibc
版本。
更新:将现有的 /usr/share/zoneinfo
系统目录复制到新的 /usr/glibc/share/zoneinfo
目录至少解决了 TZ
变量的问题。但是只要 TZ
变量没有设置新的 glibc
版本就不能识别正确的时区。
我用 vi
打开了新的 libc.so.6
库并搜索了 localtime
。
新 glibc
版本寻找 localtime
的硬编码目录设置为 /usr/glibc/etc
。
然后这是一个简单的任务:我运行命令
ln -s /usr/share/zoneinfo/Europe/Vienna /usr/glibc/etc/localtime
现在 localtime
在新的 glibc
版本中被正确识别,无需使用 TZ
变量。
这个 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
。
如何永久设置 new glibc
版本的时区?
我不想使用 TZ 变量!
更新:
使用 TZ
变量不会改变任何东西。我想我没有正确配置新的 glibc
版本。
更新:将现有的 /usr/share/zoneinfo
系统目录复制到新的 /usr/glibc/share/zoneinfo
目录至少解决了 TZ
变量的问题。但是只要 TZ
变量没有设置新的 glibc
版本就不能识别正确的时区。
我用 vi
打开了新的 libc.so.6
库并搜索了 localtime
。
新 glibc
版本寻找 localtime
的硬编码目录设置为 /usr/glibc/etc
。
然后这是一个简单的任务:我运行命令
ln -s /usr/share/zoneinfo/Europe/Vienna /usr/glibc/etc/localtime
现在 localtime
在新的 glibc
版本中被正确识别,无需使用 TZ
变量。