Linux的时区文件总是在/usr/share/zoneinfo中吗?

2eafrhcq  于 2023-11-17  发布在  Linux
关注(0)|答案(2)|浏览(190)

我正在写一个程序,它需要能够在Linux上读取时区文件。这意味着我需要能够在不同的发行版中一致地找到它们。据我所知,它们总是位于/usr/share/zoneinfo中。问题是,它们实际上 * 总是 * 位于/usr/share/zoneinfo中吗?还是有发行版将它们放在其他地方?如果是这样,它们放在哪里?

arknldoa

arknldoa1#

引用自tzset(3)
使用的系统时区目录取决于(g)libc版本。libc 4和libc 5使用/usr/lib/zoneinfo,并且,从libc-5.4.6开始,当这不起作用时,将尝试/usr/share/zoneinfo。Glibc 2将使用环境变量TZernet,如果它存在的话。它的默认值取决于它是如何安装的,但通常是/usr/share/zoneinfo。
然而,请注意,没有什么能阻止一些反常的发行版修补libc并将文件放置在任何他们想要的地方。

lskq00tm

lskq00tm2#

The public-domain time zone database包含在Linux上处理时区的代码和数据。
公共域时区数据库包含代表地球仪上许多代表性位置的本地时间历史的代码和数据。它定期更新以反映政治机构对时区边界、UTC偏移和夏令时规则所做的更改。此数据库(通常称为tz或zoneinfo)被几个实现使用,包括GNU/Linux、FreeBSD、NetBSD、OpenBSD、Cygwin、DJGPP、AIX中使用的GNU C库,Mac OS X、OpenVMS、Oracle数据库、Solaris、Tru 64和UnixWare。
这涵盖了很多系统,但我只能同意Roman的观点,即没有人可以被阻止创建一个不同的发行版。据我所知,zonezinfo文件的存在和位置没有被任何官方标准所涵盖。标准(例如POSIX和XPG 4)只建立了API。

相关问题