為什麼 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

時區資料庫現在由網路號碼分配機構維護。

相關內容