首页 > 解决方案 > time.LoadLocation() 为美国/太平洋新时区提供未知时区

问题描述

Go version: 1.14.2

Operating system: Linux (Ubuntu)

我正在开发一个基于动态时区的系统,用户可以在其中设置时区。我有一个用户将时区设置为 US/Pecific-New。对于这个时区,golang 时间包给出以下错误:

unknown time zone US/Pacific-New

我对此进行了研究,发现时间包从具有文件路径的本地系统加载时区:

/usr/share/zoneinfo

/usr/local/go/lib/time

在这些路径上,在我的本地系统以及暂存的 Pacific-New 上,这两个位置都丢失了。

有没有办法在这些地点获得 Pacific-New?

标签: gotimezone

解决方案


US/Pacific-New从来都不是“真实”时区,不应在任何系统上选择。

它的创建是为了反映太平洋时间的潜在变化,而这种变化从未成为法律。当时的想法是在更改之前准备好一个时区。然而,由于该法案没有颁布,这被证明是一个失败的实验。TZDB 不再尝试创建区域以推测未来的变化,而只会在它们是官方的或迫在眉睫的时候添加或更新它们。

最终,US/Pacific-New它只是一个链接US/Pacific,然后更新为首选形式的链接America/Los_Angeles。最后一个包含此类链接的 TZDB 版本US/Pacific-New是 2020a。

来自 2020b 发行说明:

长期过时的文件pacificnew、 systemv 和 yearistype.sh 已从发行版中删除。(感谢 Tim Parenti。)

您可以通过在 TZDB 中搜索“Pacific-New”和“pacificnew”的文件,并阅读NEWS文件pacificnew删除之前的 2020a 版本来阅读有关此链接条目的悠久历史的更多信息。

就实际建议而言,不要US/Pacific-New在任何系统上设置。它不再是有效的时区标识符。整个系统都会受到影响。改为America/Los_Angeles改为。


推荐阅读