典型的 *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
時區資料庫現在由網路號碼分配機構維護。