我想以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
答案 0 :(得分:1)
您不能可靠地做到这一点。
在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偏移量,即无名的时区。