典型的 *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 多个,那为什么差别这么大呢?
每个时区通常会生成三个版本:posix
、right
和系统的默认值。
$ 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
时区数据库现在由互联网号码分配机构维护。