我写了一个Android应用,需要手机当前所在的短时区名称。
我正在使用以下代码:
String timeZone = Calendar.getInstance().getTimeZone().getDisplayName(false, TimeZone.SHORT);
在芝加哥运行时,返回“CST”。在纽约,“EST”。在Strasbourg, France中,它返回“HNEC”(Heure Normale de l'Europe Centrale in French)。
此位置的时区被某些人称为“中欧时间”(参见维基百科的Time zones of Europe)。
我将timeZone
传递给第三方系统,该系统非常坚持获得“CET”(而不是“HNEC”)。是否有一个API调用我可以依赖它来返回三个字母(我认为,“更现代”)的短时区名称?
由于我的代码在越来越多的地方运行,我猜这个问题也会在其他地方发生。
我真的希望避免维护某种三字母到四个字母的短时区名称的地图。
答案 0 :(得分:6)
我很抱歉,但你可能无法保持映射。三个字符实际上是较旧的,而不是更现代的版本。来自classdocs:
如果这是我的问题,我会得到我的第三方系统支持的列表并映射它。
答案 1 :(得分:0)
您可以使用SimpleDateFormat以三个字母或全名打印时区。例如:
DateFormat getTimeZoneShort = new SimpleDateFormat("z", Locale.US);
String timeZoneShort = getTimeZoneShort.format(Calendar.getInstance().getTime());
DateFormat getTimeZoneLong = new SimpleDateFormat("zzzz", Locale.US);
String timeZoneLong = getTimeZoneLong.format(Calendar.getInstance().getTime());