【发布时间】:2021-05-28 14:35:33
【问题描述】:
我在 android 中遇到了日光问题,时间应该是 +3 GMT/UTC 但我只得到 +2。有什么解决方案还是我无法处理?请在下面找到我的代码
TimeZone.getDefault().useDaylightTime();
SimpleDateFormat df = new SimpleDateFormat("HH:mm",Locale.ENGLISH); //"2021-02-18T11:00:00"
df.setTimeZone(TimeZone.getTimeZone("UTC"));
return df.format(calendar.getTime());
请注意,夏令时偏移量返回零。我应该怎么做才能处理日光? 另一个注意我的时间是约旦/安曼, 在冬天这应该返回+2,但在夏天它应该返回+3
【问题讨论】:
-
我建议你不要使用
TimeZone、SimpleDateFormat和Calendar。这些类设计糟糕且过时,SimpleDateFormat特别是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的ZoneId和LocalTime。 -
切换到
java.timeAPI。出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7。如果您正在为Android 项目且您的 Android API 级别仍不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。 -
@OleV.V.感谢您的建议,但实际上旧的 android 设备不支持 java 8
-
@BasilBattikhi 不直接,你是对的。但只要您使用的是 Android Gradle 插件 4.0 或更高版本,使用 coreLibraryDesugaring 您就可以直接使用 java.time。如果不是,请按照我在下面的答案和那里的链接中所述使用 ThreeTen Backport。
标签: java android date simpledateformat