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。目录中包含多个文件,每个文件都对应着一个时区。这些文件的名称通常基于地理位置或国家名称,例如 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。