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
导航