【发布时间】:2020-11-27 18:52:35
【问题描述】:
我有一个代表时区的字符串,但我需要验证它。例如:
timeZone := "ABC-3"
golang 中是否有验证方法?还是一些外部库?
【问题讨论】:
标签: go
我有一个代表时区的字符串,但我需要验证它。例如:
timeZone := "ABC-3"
golang 中是否有验证方法?还是一些外部库?
【问题讨论】:
标签: go
如果您指的是缩写或代码,例如 GMT、CET、PST、UTC-7、GMT+3,Go 本身不支持使用这些缩写和代码加载位置。
您可以使用time.LoadLocation 函数尝试加载不同的位置,但您需要使用IANA Time Zone Database 中定义的时区名称。举几个例子:
UTC - 用于加载 UTC 时区位置Local - 代表系统的本地时区America/Chicago、Europe/Sarajevo、Asia/Shanghai、Africa/Accra等——用于加载对应的时区如果你给time.LoadLocation函数提供了一个无效的时区,你会得到一个错误。
timeLoc, err := time.LoadLocation("ABC-3")
if err != nil {
fmt.Println(err)
}
输出:
unknown time zone ABC-3
要获取所有有效时区的列表,请查看this 答案。
如果您出于某种原因确实需要在代码中使用 UTC-7 之类的缩写,您可以随时创建自己的位置并在整个代码中使用它。示例:
loc := time.FixedZone("UTC-7", -7*60*60)
您可以找到更多详细信息here。
有一些像go-timezone这样的包,可以帮助你从CET、PST、GMT等时区代码中提取时区位置信息。在我看来,有一个使用时需要注意的几点:
BST 等某些时区代码可能会返回 ErrAmbiguousTzAbbreviations 错误,这意味着有多个时区使用相同的时区代码。【讨论】: