得到三个字母的短时区名称(而不是四个字母)?

时间:2010-05-10 23:44:58

标签: java android internationalization timezone

我写了一个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调用我可以依赖它来返回三个字母(我认为,“更现代”)的短时区名称?

由于我的代码在越来越多的地方运行,我猜这个问题也会在其他地方发生。

我真的希望避免维护某种三字母到四个字母的短时区名称的地图。

2 个答案:

答案 0 :(得分:6)

我很抱歉,但你可能无法保持映射。三个字符实际上是较旧的,而不是更现代的版本。来自classdocs:

    为了与JDK 1.1.x兼容,还支持其他一些三字母时区ID(例如“PST”,“CTT”,“AST”)。 但是,它们的使用已被弃用,因为相同的缩写通常用于多个时区(例如,“CST”可能是美国“中央标准时间”和“中国标准时间”),以及Java然后平台只能识别其中一个。

如果这是我的问题,我会得到我的第三方系统支持的列表并映射它。

答案 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());