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


12

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

然后是zone.tab文件(/usr/share/zoneinfo/zone.tab)。它仅列出了400多个时区(在我的系统上为414)。它缺少很多时区。那么,问题是为什么呢?他们为什么不都在那里?而且由于它们并不全部存在,因此如何确定将哪些放入其中?

zone.tab确实包含国家/地区代码以及它列出的每个时区的经度和纬度(这可能是文件存在的原因),并且并非所有时区都真正具有时区(例如,UTC并不具有这些时区) ,并且不在zone.tab中),因此很明显,并不是每个时区都可以在zone.tab中列出。但是,为什么不是所有与文件中列出的实际城市或地区相对应的城市(大多数都如此)呢?为什么只有414而不是实际可用的1000+?

Answers:


6

名为“ 包含zone.tab的新请求 ”的线程提供了有关zone.tab用途的一些说明。

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

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

每个区域的其他别名存储在tzdata源代码中。

例如,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

所述tzcode Makefile显示了如何那些产生,并提到他们的原因:posix忽略闰秒,right包括它们。

也可以看看:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.