【发布时间】:2010-10-09 08:25:56
【问题描述】:
我正在编写一个需要能够在 Linux 上读取时区文件的程序。这意味着我需要能够在发行版中始终如一地找到它们。据我所知,它们总是位于 /usr/share/zoneinfo 中。问题是,它们实际上是否总是 位于 /usr/share/zoneinfo 中?还是有将它们放在其他地方的发行版?如果是这样,他们把它们放在哪里?
【问题讨论】:
我正在编写一个需要能够在 Linux 上读取时区文件的程序。这意味着我需要能够在发行版中始终如一地找到它们。据我所知,它们总是位于 /usr/share/zoneinfo 中。问题是,它们实际上是否总是 位于 /usr/share/zoneinfo 中?还是有将它们放在其他地方的发行版?如果是这样,他们把它们放在哪里?
【问题讨论】:
引用tzset(3):
使用的系统时区目录取决于 (g)libc 版本。 Libc4 和 libc5 使用 /usr/lib/zoneinfo, 并且,从 libc-5.4.6 开始, 当这不起作用时,将尝试 /usr/share/zoneinfo。 glibc2会使用环境 变量 TZDIR,当它存在时。它的 默认值取决于它是如何安装的,但通常是 /usr/share/zoneinfo.
但是请注意,没有什么可以阻止一些不正当的发行版修补 libc 并将文件放置在他们想要的任何位置。
【讨论】:
The public-domain time zone database 包含在 Linux 上处理时区的代码和数据。
公共域时区数据库 包含代表的代码和数据 对许多人来说,当地时间的历史 周边的代表性地点 地球。它会定期更新为 反映政治变化 主体到时区边界,UTC 偏移量和夏令时规则。 该数据库(通常称为 tz 或 zoneinfo) 被几个人使用 实现,包括 GNU C 用于 GNU/Linux、FreeBSD、 NetBSD、OpenBSD、Cygwin、DJGPP、AIX、 Mac OS X、OpenVMS、Oracle 数据库、 Solaris、Tru64 和 UnixWare。
这涵盖了很多系统,但我只能同意 Roman 的观点,即无论出于何种原因,都无法阻止任何人创建不同的发行版。据我所知,任何官方标准都没有涵盖 zonezinfo 文件的存在和位置。标准(例如 POSIX 和 XPG4)仅建立 API。
【讨论】: