首页 > 解决方案 > 如何验证时区?

问题描述

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

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

要获取所有有效时区的列表,请查看答案。


如果出于某种原因您确实需要UTC-7在代码中使用缩写,您可以随时创建自己的位置并在整个代码中使用它。例子:

loc := time.FixedZone("UTC-7", -7*60*60)

您可以在此处找到更多详细信息。


有一些像go-timezone这样的包,可以帮助您从时区代码中提取时区位置信息,如CET, PST,GMT等。在我看来,使用它时需要注意以下几点:

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

推荐阅读