为什么 zone.tab 缺少这么多时区?

为什么 zone.tab 缺少这么多时区?

典型的 *nix 盒子上有超过一千个时区文件(在 /user/share/zoneinfo 中)。其中许多仅在历史日期上有所不同,这与仅关心最近日期甚至仅关心当前时间的程序无关。但不管怎样,有它们有很多,选择它们中的任何一个作为系统的时区以及通过设置 TZ 环境变量将它们中的任何一个用于特定程序或 shell 都是完全合法的。它们都是有效的。

然后是 zone.tab 文件 (/usr/share/zoneinfo/zone.tab)。它只列出了 400 多个时区(我的系统上有 414 个)。它缺少一个很多的时区。那么,问题是为什么?为什么他们都不在里面?既然它们并不都在那里,那么如何决定将哪些放入那里呢?

zone.tab 确实包含国家代码以及它列出的每个时区的经度和纬度(这可能是文件存在的原因),而不是全部时区确实有这些(例如 UTC 没有这些,而且它不在 zone.tab 中),所以很明显,没有每一个时区可以在 zone.tab 中列出。但是为什么文件中没有列出与实际城市或地区(大多数情况下)相对应的所有信息?为什么实际可用的数量只有 414 个而不是 1000 多个?

答案1

一个主题为再次请求纳入 zone.tab提供了一些zone.tab用途的解释。

它的主要用途似乎是显示城市及其位置的地图,允许用户通过单击附近的城市来选择他们的时区。

考虑到这一点,它不需要知道每个城市的所有别名,知道一种首选的引用方式就足够了。 (但看起来它总是包含每个国家至少一个城市。)

每个区域的其他别名存储在兹数据源代码。

例如,该backward文件有

Link    Asia/Kolkata        Asia/Calcutta

以便人们可以使用新的拼写或旧的拼写。

中的所有其他文件/usr/share/zoneinfo都是使用此源代码生成的zic

但别名并没有 600 多个,那为什么差别这么大呢?

每个时区通常会生成三个版本:posixright和系统的默认值。

$ cd /usr/share/zoneinfo
$ find right -type f | wc -l
581
$ find posix -type f | wc -l
581
$ find . \( -name posix -o -name right \) -prune -o -type f | wc -l
586

兹码 Makefile显示了它们是如何生成的,并提到了它们的原因:posix忽略闰秒,right包括它们。

也可以看看:

答案2

根据以下链接http://en.wikipedia.org/wiki/Tz_database

时区数据库现在由互联网号码分配机构维护。

相关内容