登录
首页 >  Golang >  Go问答

检索系统时区名称以获取 tz 数据库格式

来源:stackoverflow

时间:2024-03-01 17:12:27 206浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《检索系统时区名称以获取 tz 数据库格式》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我想获取 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 偏移量,即无名时区。

今天关于《检索系统时区名称以获取 tz 数据库格式》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>