我需要将 IANA/Olson 时区 ID 映射到缩写,如 EST、PST 等。
我知道这不是一对一的映射,例如,对于 EST,有很多 IANA 时区。
我可以使用某种数据库/映射吗?
PS:JavaScript 解决方案更可取,但任何可以帮助我构建此映射的信息(IANA 时区 ID -> 缩写)都值得赞赏。
我需要将 IANA/Olson 时区 ID 映射到缩写,如 EST、PST 等。
我知道这不是一对一的映射,例如,对于 EST,有很多 IANA 时区。
我可以使用某种数据库/映射吗?
PS:JavaScript 解决方案更可取,但任何可以帮助我构建此映射的信息(IANA 时区 ID -> 缩写)都值得赞赏。
IANA TZDB 源数据确实已经有缩写,但必须针对相关日期计算它们。您可以在此处的示例数据中的Zone.FORMAT
和Rule.LETTER/S
列中看到它。
由于时区缩写如CST
可能是不明确的,因此仅建议您将它们用于向人类显示。永远不要尝试将它们用于另一个方向,因为大多数实现只能识别少数几个,并且它们往往仅对美国有效。
由于您要求提供可以为您执行此操作的代码,请查看我的答案中代码的下半部分,了解如何在 .Net 中使用Noda Time执行此操作。(上半部分是关于首先从 Windows 区域转换为 IANA 区域,您不需要。)
您可以查看JavaScript 的几个 TZDB 库之一,但我不确定是否有任何直接公开缩写数据。此外,对于这么小的东西来说,这有点重。
在带有joda-time的java中,我们可以从iana id获取时区缩写,如下所示
DateTimeZone dz = DateTimeZone.forID("America/New_York");
String tzid = dz.getShortName(DateTimeUtils.currentTimeMillis());
//tzid will be 'EST'
String longerTimeZoneName = dz.getName(DateTimeUtils.currentTimeMillis());
//longerTimeZoneName will be 'Eastern Standard Time'