3

我需要将 IANA/Olson 时区 ID 映射到缩写,如 EST、PST 等。

我知道这不是一对一的映射,例如,对于 EST,有很多 IANA 时区。

我可以使用某种数据库/映射吗?

PS:JavaScript 解决方案更可取,但任何可以帮助我构建此映射的信息(IANA 时区 ID -> 缩写)都值得赞赏。

4

2 回答 2

3

IANA TZDB 源数据确实已经有缩写,但必须针对相关日期计算它们。您可以在此处的示例数据中的Zone.FORMATRule.LETTER/S列中看到它。

由于时区缩写如CST 可能是不明确的,因此仅建议您将它们用于向人类显示。永远不要尝试将它们用于另一个方向,因为大多数实现只能识别少数几个,并且它们往往仅对美国有效。

由于您要求提供可以为您执行此操作的代码,请查看我的答案中代码的下半部分,了解如何在 .Net 中使用Noda Time执行此操作。(上半部分是关于首先从 Windows 区域转换为 IANA 区域,您不需要。)

您可以查看JavaScript 的几个 TZDB 库之一,但我不确定是否有任何直接公开缩写数据。此外,对于这么小的东西来说,这有点重。

于 2013-08-15T12:12:44.240 回答
2

在带有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'
于 2013-11-12T18:24:11.023 回答