给定一个时区,如EDT或CEST,有没有办法获得一个time.Location
引用,以将其与func (t Time) In(loc *Location) Time
一起使用?
可以使用time.LoadLocation("Europe/Berlin")
初始化例如 CEST 的位置,但如何对实际时区表示法执行相同的操作?
鉴于@Svip非常有见地的评论,是否有任何明智的方法来返回代表性位置的列表?这是为了WET
回报,例如 [Europe/London, Atlantik/Reykjavík]
.所有其他WET
地点将遵循与这两个地点之一相同的时区安排。
存在一个包 github.com/tkuchiki/go-timezone,它提供区域缩写和位置之间的映射。查看其时区。
但是,正如评论者还指出的那样,缩写时区名称是不明确的,最好避免用户输入此类名称。正如其他问题中提到的(为什么没有Go的时间。Parse(( 解析时区标识符?以及如何正确解析时区代码(,在解析时间时,Go 在匹配运行代码的机器的本地时区和UTC
时区时,正确解析缩写时区。根据我的经验,所有其他方法都没有正确解析。
可以选择解析给定位置的时间。(https://golang.org/pkg/time/#LoadLocation(
type CustomTime struct {
time.Time
}
const ctLayout = "Jan 2, 2006 at 3:04pm (MST)"
func (ct *CustomTime) UnmarshalJSON(b []byte) (err error) {
s := strings.Trim(string(b), """)
if s == "null" {
ct.Time = time.Time{}
return
}
location, err := time.LoadLocation("Local")
if err != nil {
return err
}
ct.Time, err = time.ParseInLocation(ctLayout, s, location)
return err
}