在 Go 中将时区解析为位置结构



给定一个时区,如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
}

相关内容

  • 没有找到相关文章

最新更新