【发布时间】:2013-08-17 12:36:13
【问题描述】:
我需要将 IANA/Olson 时区 ID 映射到缩写,例如 EST、PST 等。
我知道这不是一对一的映射,例如,对于 EST,有很多 IANA 时区。
我可以为此使用某种数据库/映射吗?
PS:JavaScript 解决方案更可取,但感谢任何可以帮助我构建此映射的信息(IANA 时区 ID -> 缩写)。
【问题讨论】:
标签: timezone abbreviation iana
我需要将 IANA/Olson 时区 ID 映射到缩写,例如 EST、PST 等。
我知道这不是一对一的映射,例如,对于 EST,有很多 IANA 时区。
我可以为此使用某种数据库/映射吗?
PS:JavaScript 解决方案更可取,但感谢任何可以帮助我构建此映射的信息(IANA 时区 ID -> 缩写)。
【问题讨论】:
标签: timezone abbreviation iana
IANA TZDB 源数据确实已经有缩写,但必须针对相关日期计算它们。您可以在示例数据here、Zone.FORMAT 和Rule.LETTER/S 列中看到它。
由于CST can be ambiguous 等时区缩写,因此仅建议您将它们用于向人类显示。切勿尝试将它们用于另一个方向,因为大多数实现只能识别少数几个,而且它们往往仅对美国有效。
由于您要求提供可以为您执行此操作的代码,请查看 my answer 中代码的下半部分,了解如何在 .Net 中使用 Noda Time 执行此操作。 (上半部分是关于先从 Windows 区域转换为 IANA 区域,您不需要。)
您可以查看the several TZDB libraries for JavaScript 之一,但我不确定是否有任何直接公开缩写数据。再说了,这么小的东西有点重。
【讨论】:
在带有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'
【讨论】:
EST 到 America/New_York)中获取 IANA 格式