| // Copyright 2009 The Go Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | // +build aix darwin,386 darwin,amd64 dragonfly freebsd linux,!android netbsd openbsd solaris | 
 |  | 
 | // Parse "zoneinfo" time zone file. | 
 | // This is a fairly standard file format used on OS X, Linux, BSD, Sun, and others. | 
 | // See tzfile(5), https://en.wikipedia.org/wiki/Zoneinfo, | 
 | // and ftp://munnari.oz.au/pub/oldtz/ | 
 |  | 
 | package time | 
 |  | 
 | import ( | 
 | 	"runtime" | 
 | 	"syscall" | 
 | ) | 
 |  | 
 | // Many systems use /usr/share/zoneinfo, Solaris 2 has | 
 | // /usr/share/lib/zoneinfo, IRIX 6 has /usr/lib/locale/TZ. | 
 | var zoneSources = []string{ | 
 | 	"/usr/share/zoneinfo/", | 
 | 	"/usr/share/lib/zoneinfo/", | 
 | 	"/usr/lib/locale/TZ/", | 
 | 	runtime.GOROOT() + "/lib/time/zoneinfo.zip", | 
 | } | 
 |  | 
 | func initLocal() { | 
 | 	// consult $TZ to find the time zone to use. | 
 | 	// no $TZ means use the system default /etc/localtime. | 
 | 	// $TZ="" means use UTC. | 
 | 	// $TZ="foo" means use /usr/share/zoneinfo/foo. | 
 |  | 
 | 	tz, ok := syscall.Getenv("TZ") | 
 | 	switch { | 
 | 	case !ok: | 
 | 		z, err := loadLocation("localtime", []string{"/etc/"}) | 
 | 		if err == nil { | 
 | 			localLoc = *z | 
 | 			localLoc.name = "Local" | 
 | 			return | 
 | 		} | 
 | 	case tz != "" && tz != "UTC": | 
 | 		if z, err := loadLocation(tz, zoneSources); err == nil { | 
 | 			localLoc = *z | 
 | 			return | 
 | 		} | 
 | 	} | 
 |  | 
 | 	// Fall back to UTC. | 
 | 	localLoc.name = "UTC" | 
 | } |