2010-05-10 40 views
4

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

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

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

回答

6

对不起,但你可能坚持维护一个映射。三个字符实际上是较旧的,而不是更现代的版本。来自classdocs:

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

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

+1

如何在android中获取移动时区的缩写?有什么解决办法吗? – 2015-03-31 06:39:26

+0

请检查我的答案。 – 2017-04-02 18:42:41

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()); 
相关问题