Android中三个字母的时区ID不一致

时间:2016-06-21 14:58:29

标签: java android date timezone

我在Android中使用zzz的基本Java格式来获取附加的时区。请找到以下代码

public static final String DISPLAY_DATE_FORMAT = "MMMM dd, yyyy 'at' hh:mm:ss a zzz";    
SimpleDateFormat formatter = new SimpleDateFormat(
                    DISPLAY_DATE_FORMAT);
formatter.setTimeZone(timeZone);
date = formatter.format(formattedDateTime);

所以我在两个平台上得到的结果是

  

在版本6.0.1中,它显示GMT-04:00,在5.1.1中显示为EST,这有点奇怪。

我也尝试使用以下代码

timeZone.getDisplayName(timeZone.inDaylightTime(formattedDateTime),TimeZone.SHORT);

并得到了相同的结果。有什么办法,我可以得到EST而不是GMT附加值。 我知道这个方法是按照oracle进行描述的,但是有什么方法我仍然能得到三个字母的timezoneID。

1 个答案:

答案 0 :(得分:0)

主流媒体中常见的3-4个字母缩写不是真正的时区。它们不是标准化的。它们甚至都不是唯一的!

现代日期时间库避开这些缩写,而是使用适当的时区名称。

this list of proper time zone names。它们的格式为print (gpio.read(1))。例如,continent/regionAmerica/Montreal

  

2016-06-11T12:34.56-07:00 [美国/洛杉矶]

您正在使用旧的日期时间类,这些类是众所周知的麻烦和设计不佳。它们已被Java 8及更高版本中内置的java.time框架所取代。许多java.time功能都被反向移植到Java 6& 7(ThreeTen-Backport)并进一步适应Android(ThreeTenABP)。