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



我正在使用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。

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

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

请参阅此正确时区名称的列表。它们的格式是continent/region。例如,America/MontrealAsia/Kolkata

2016-06-11T12:34.56-07:00 [America/LOS_ANGELES]

您正在使用众所周知的旧日期课程,这些课程众所周知且设计不佳。它们已被Java所取代。Java的大部分时间功能都回到Java 6&7(Threeten-Backport),并进一步适应Android(Threetenabp)。

最新更新