【问题标题】:How can I validate a timezone?如何验证时区?
【发布时间】:2020-11-27 18:52:35
【问题描述】:

我有一个代表时区的字符串,但我需要验证它。例如:

timeZone := "ABC-3"

golang 中是否有验证方法?还是一些外部库?

【问题讨论】:

标签: go


【解决方案1】:

如果您指的是缩写或代码,例如 GMTCETPSTUTC-7GMT+3,Go 本身不支持使用这些缩写和代码加载位置。

您可以使用time.LoadLocation 函数尝试加载不同的位置,但您需要使用IANA Time Zone Database 中定义的时区名称。举几个例子:

  • UTC - 用于加载 UTC 时区位置
  • Local - 代表系统的本地时区
  • America/ChicagoEurope/SarajevoAsia/ShanghaiAfrica/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这样的包,可以帮助你从CETPSTGMT等时区代码中提取时区位置信息。在我看来,有一个使用时需要注意的几点:

  • BST 等某些时区代码可能会返回 ErrAmbiguousTzAbbreviations 错误,这意味着有多个时区使用相同的时区代码。
  • 时区代码和时区位置的关系信息由包的贡献者和维护者维护和更新(硬编码)。

【讨论】:

    猜你喜欢
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多