获取军事时区缩写

19
我有一个org.joda.time.DateTime对象,我需要检索军事时区缩写(例如UTC-07: 00的T,UTC-08: 00的U,UTC±00: 00的Z)。
请参阅http://en.wikipedia.org/wiki/List_of_military_time_zones
这是我目前的做法:
int offset = dt.getZone().toTimeZone().getRawOffset() / (60 * 60 * 1000);
String timeZoneCode = timeZoneCodeMap.get(offset);

timeZoneCodeMap 是一个 HashMap<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或其他地方)已经包含了时区到军事缩写的映射?

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


2
http://sourceforge.net/p/joda-time/discussion/337835/thread/51d091f2/ - assylias
5
正如assylias指出的那样,Joda-Time不支持此功能。JSR 310: Date and Time API是Joda-Time的继承者,并与即将推出的Java 8集成。如果您关心此功能,可以联系JSR团队,了解是否可以添加支持。这可能只需要添加一个格式化程序实现(我不知道,还没有仔细思考过)。该团队过去一直对贡献者持开放态度,现在也可能接受您的意见或代码捐赠。 - Basil Bourque
2
自己编写方法有什么不好的呢? - Anubian Noob
7
也许已经存在更好的选择。 - jewbix.cube
3
请注意,并非所有时区都使用完整的小时数。相当多的时区使用半个小时和四分之一小时,直到1955年孟买时间为UTC+4:51。 - Ben
显示剩余2条评论
1个回答

2
这段代码很简短,你可能想自己动手完成它...
static final String MAPPING = "YXWVUTSRQPONZABCDEFGHIKLM";
...
  String timeZoneCode = MAPPING.substring(offset + 12, offset + 13);

接受这个更聪明的替代方案,而不是使用HashMap,假设偏移量已经被规范化,以考虑半小时和四分之一小时,就像@Ben在我的问题评论中提到的那样。 - jewbix.cube

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接