4.2 时区
Location
timeLocalUTCLocalUTCtimeUTC

Local 是如何做到表示本地时区的?

时区信息既浩繁又多变,Unix 系统以标准格式存于文件中,这些文件位于 /usr/share/zoneinfo,而本地时区可以通过 /etc/localtime 获取,这是一个符号链接,指向 /usr/share/zoneinfo 中某一个时区。比如我本地电脑指向的是:/usr/share/zoneinfo/Asia/Shanghai。

因此,在初始化 Local 时,通过读取 /etc/localtime 可以获取到系统本地时区。

TZ

相关代码:

tz, ok := syscall.Getenv("TZ")
switch {
case !ok:
	z, err := loadZoneFile("", "/etc/localtime")
	if err == nil {
		localLoc = *z
		localLoc.name = "Local"
		return
	}
case tz != "" && tz != "UTC":
	if z, err := loadLocation(tz); err == nil {
		localLoc = *z
		return
	}
}

获得特定时区的实例

LoadLocation
func LoadLocation(name string) (*Location, error)

如果 name 是""或"UTC",返回UTC;如果 name 是"Local",返回Local;否则 name 应该是IANA时区数据库里有记录的地点名(该数据库记录了地点和对应的时区),如"America/New_York"。

LoadLocation$GOROOT/lib/time/zoneinfo.zip

可以在 Unix 系统下的 /usr/share/zoneinfo 中找到所有的名称。

总结

time.LocalUTC
导航