【问题标题】:new version of glibc returns wrong timezone新版本的 glibc 返回错误的时区
【发布时间】: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 版本就不能识别正确的时区。

【问题讨论】:

    标签: timezone glibc


    【解决方案1】:

    我用vi 打开了新的libc.so.6 库并搜索了localtime

    新的glibc 版本在其中寻找localtime 的硬编码目录设置为/usr/glibc/etc

    然后这是一项简单的任务:我运行了命令

    ln -s /usr/share/zoneinfo/Europe/Vienna /usr/glibc/etc/localtime

    现在localtime 可以在新的glibc 版本中正确识别,而无需使用TZ 变量。

    【讨论】:

      猜你喜欢
      • 2017-04-17
      • 2016-01-24
      • 2018-08-07
      • 2011-05-07
      • 2021-04-21
      • 1970-01-01
      • 2018-07-21
      • 2013-06-03
      • 2020-10-12
      相关资源
      最近更新 更多