获取军事时区缩写

Posted

技术标签:

【中文标题】获取军事时区缩写【英文标题】:Get Military Time Zone Abbreviation 【发布时间】:2013-11-26 17:16:33 【问题描述】:

我有一个org.joda.time.DateTime 对象,我需要检索军事时区缩写(例如 T 表示 UTC-07:00,U 表示 UTC-08: 00, Z 表示 UTC±00:00)。

见http://en.wikipedia.org/wiki/List_of_military_time_zones

这是我目前的做法:

int offset = dt.getZone().toTimeZone().getRawOffset() / (60 * 60 * 1000);
String timeZoneCode = timeZoneCodeMap.get(offset);

其中timeZoneCodeMapHashMap<Integer, String>,使用如下条目进行初始化

timeZoneCodeMap.put(1, "A");
timeZoneCodeMap.put(2, "B");
timeZoneCodeMap.put(3, "C");
...
timeZoneCodeMap.put(-10, "W");
timeZoneCodeMap.put(-11, "X");
timeZoneCodeMap.put(-12, "Y");      
timeZoneCodeMap.put(0, "Z");

是否存在已经包含时区到军事缩写的映射的函数或库(在 Joda 或其他中)?

如果还有更好的方法来计算偏移量,请随时告诉我。

【问题讨论】:

sourceforge.net/p/joda-time/discussion/337835/thread/51d091f2 正如 assylias 指出的那样,Joda-Time 中没有这样的支持。 JSR 310: Date and Time API 是 Joda-Time 的继任者,并与即将推出的 Java 8 集成。如果您关心此功能,您可以咨询 JSR 团队以了解添加支持。可能只是添加格式化程序实现的问题(我不知道,我还没有考虑过)。该团队过去一直对贡献者开放,并且可能仍会接受您的输入或代码捐赠。 编写自己的方法有什么不好? 因为可能已经存在更好的了。 请注意,并非所有时区都使用整数小时数。相当多的时区使用半小时和一刻钟,直到 1955 年孟买时间是 UTC+4:51。 【参考方案1】:

这么少的代码,你还不如自己做......

static final String MAPPING = "YXWVUTSRQPONZABCDEFGHIKLM";
...
  String timeZoneCode = MAPPING.substring(offset + 12, offset + 13);

【讨论】:

接受这个作为使用 HashMap 的更聪明的替代方案,假设偏移量已经标准化为占半小时和四分之一小时,正如@Ben 在他对我的问题的评论中提到的那样。

以上是关于获取军事时区缩写的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中获取移动时区的缩写/国家代码?

iOS 手机时区获取问题

使用 JavaScript 检测时区缩写

如何在 Postgres 9.3 中获取当前时区名称?

iOS Swift:当字符串包含时区缩写时,如何将特定的日期字符串格式转换为日期对象?

时区日期格式问题