IANA Time Zone Database 和 ZONEINFO 詳解
Time Zone Database
IANA Time Zone Database,簡稱 tz 或 zoneinfo,是一組表示地球上各地的時間歷史的代碼和數據,由互聯網號碼分配機構(Internet Assigned Numbers Authority,IANA)維護。該數據庫包含了全球各國的時間信息,包括時區邊界、UTC(世界標準時間)和夏令時等規則。IANA會根據各地政體的變化而定期更新關于時區邊界、UTC和夏令時等的規則。該數據庫是用于實現網絡上的時間同步和計算的必要條件,也為開發者和用戶提供了方便的時間轉換工具。
IANA Time Zone Database 的各個版本可以到如下地址下載https://data.iana.org/time-zones/releases/。
ZONEINFO
ZONEINFO是IANA Time Zone Database 時區數據庫的一種格式,也稱為“tz數據庫”或“Olson數據庫”,用于表示世界各個國家和地區的時區和夏令時信息。ZONEINFO格式的文件通常具有一個".tz"、".tzdb" 或 ".zoneinfo"的文件擴展名。
ZONEINFO格式的文件包含了當前的時區和夏令時規則,以及發生在過去和未來的時間更改記錄。在這些文件中,以普通文本格式保存了各種國家和地區的標準時間和夏令時的歷史記錄。ZONEINFO格式的文件的優勢在于它可以被輕松地更新,使得它能夠及時反映出國家或地區的時區更改。以美國為例,夏令時規則近年來經常發生變化,而ZONEINFO格式的文件可以及時地更新這些變化,使得相關的操作系統和應用程序能夠順利地進行時區的轉換和處理。
用戶可以使用 ZONEINFO 格式的文件來實現時區轉換和處理,在許多操作系統和編程語言中都有相關的庫支持。zoneinfo 在 Linux 系統中位置一般如下:/usr/share/zoneinfo ,在 MacOS 系統中位置一般如下:/var/db/timezone/zoneinfo。目錄中包含多個文件,每個文件都對應著一個時區。這些文件的名稱通?;诘乩砦恢没驀颐Q,例如 America/New_York 和 Asia/Shanghai 等。在每個 zoneinfo 文件中,包含了有關該地區時區規則的信息,例如時區名稱、UTC 偏移量、夏令時規則、歷史更改記錄等。
zoneinfo 文件通常由相關操作系統或軟件管理,例如 Unix 和 Linux 操作系統中的 tzdata 包。隨著時區更改不斷發生,這些文件也需保持不斷的更新,以反映出最新的時區信息和規則。
因為 zoneinfo 文件包含有關時區規則的信息,所以它們在應用程序中非常有用。例如,當應用程序需要將 UTC 時間轉換為本地時間時,它首先會使用系統中的 zoneinfo 文件來確定本地時區的偏移量和夏令時規則,然后應用這些規則來計算出本地時間。
看個例子
如下代碼,輸出一下當前的紐約時間:
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now()
loc, err := time.LoadLocation("America/New_York")
if err != nil {
panic(err)
}
date := t.In(loc).Format(time.RFC3339)
fmt.Println(date)
}
time.LoadLocation 方法加載的紐約時區信息,首先會從 ZONEINFO 環境變量對應的地址里面查找,如果沒有的話會從操作系統標準安裝位置查找,例如上文提到的 /usr/share/zoneinfo 和 /var/db/timezone/zoneinfo。