go - 如何验证时区?
问题描述
我有一个代表时区的字符串,但我需要验证它。例如:
timeZone := "ABC-3"
golang中是否有方法可以验证它?还是一些外部图书馆?
解决方案
如果您指的是诸如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
错误,这意味着有多个时区使用相同的时区代码。 - 时区代码和时区位置的关系信息由包的贡献者和维护者维护和更新(硬编码)。
推荐阅读
- spring - MapStruct : 对象属性的条件映射
- reactjs - 是否可以仅使用winston-cloudwatch 而不使用winston 将日志发送到cloudwatch?
- python - 将字符串转换为整数。检查字典中的每个字段,如果它显示“Int”,则转换 csv 文件中这些特定字段的值
- python - 两种不同大小的 DataFrame 相乘
- axios - 在 useEffect() 中使用 axios 反应应用程序正在渲染两次
- python - python中的下一个Curzon数字
- bookmarklet - 用于自动化和管理临时播放列表的书签?
- python - 空散景图
- gpu - aws gpu oom 问题 onnx cuda
- ffmpeg - FFMPEG - 使分段的 MP4 视频从 5 秒开始(开始时间 00:05 而不是 00:00)