我在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。
答案 0 :(得分:0)
主流媒体中常见的3-4个字母缩写不是真正的时区。它们不是标准化的。它们甚至都不是唯一的!
现代日期时间库避开这些缩写,而是使用适当的时区名称。
见this list of proper time zone names。它们的格式为print (gpio.read(1))
。例如,continent/region
和America/Montreal
。
2016-06-11T12:34.56-07:00 [美国/洛杉矶]
您正在使用旧的日期时间类,这些类是众所周知的麻烦和设计不佳。它们已被Java 8及更高版本中内置的java.time框架所取代。许多java.time功能都被反向移植到Java 6& 7(ThreeTen-Backport)并进一步适应Android(ThreeTenABP)。