// Package tz contains time zone info so that you can predictably load // Locations regardless of the locations available on the locally running // operating system. // // The stdlib time.LoadLocation function loads timezone data from the operating // system or from zoneinfo.zip in a local Go installation. Both of these are // often missing from some operating systems, especially Windows. // // This package has the zoneinfo.zip from Go embedded into the package so that // queries to load a location always return the same data regardless of // operating system. // // This package exists because of https://github.com/golang/go/issues/21881. package tz // import "4d63.com/tz" import ( "errors" "time" ) //go:generate rm -fr zoneinfo //go:generate unzip -q $GOROOT/lib/time/zoneinfo.zip -d zoneinfo/ //go:generate go run 4d63.com/embedfiles -out=zoneinfo.go -pkg=tz zoneinfo/ func tzData(name string) ([]byte, bool) { data, ok := files["zoneinfo/"+name] return data, ok } func LoadLocation(name string) (*time.Location, error) { if name == "" || name == "UTC" || name == "Local" { return time.LoadLocation(name) } if tzdata, ok := tzData(name); ok { return time.LoadLocationFromTZData(name, tzdata) } return nil, errors.New("unknown location " + name) }