如何解决以tz数据库格式获取系统时区名称
我想以tz数据库格式获取系统的时区信息,例如“美国/纽约”。我也希望它是平台无关的,例如代码应可在Windows,Linux和MacOS上使用。
尝试了两个食谱:
viaLocation := time.Now().Location().String() // Gives "Local"
viaZone,_ := time.Now().Zone() // Gives "EST"
“ EST”要好一些,有没有办法将其映射到“ America / New_York”?
我不介意迁移到Go 1.15并导入time/tzdata
解决方法
您不能可靠地做到这一点。
在Linux上,通常通过/ etc / localtime配置本地时间。 file format不包含IANA名称。
但是即使这样做,这也不是配置时区的唯一方法。一个明显的替代方法是TZ环境变量。我可以将TZ设置为UTC + 4,所以我的本地时区根本没有名称。这是一个简单的示例,但the TZ value can be much more complicated too。
仅当系统不提供时区定义时才使用time / tzdata包,因此导入该包也无济于事。
Marc's answer to a similar question显示了如何在Linux(以及可能的MacOS)上进行猜测,但这无非是
因此,您知道,至少不能在Linux上可靠地完成它。我认为MacOS的工作原理类似。我不知道本地时间在Windows上如何工作,但是我敢肯定,也可以配置固定的UTC偏移量,即无名的时区。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。