tl;博士
在 macOS(不是 Android)上使用ThreeTen-Backport 1.3.4 项目库时:
- 我没有得到你的
DateTimeParseException
(解析成功)
- 但是我确实得到了一个与Java 8 内置的 java.time 类中分配的时区不同的时区
2017-05-16T13:02:16Z[Africa/Monrovia]
。而不是2017-05-16T13:02:16Z[GMT]
Africa/Monrovia
区?
我们中的一些人已经看到您的代码工作,显然使用 Java 8 中内置的 java.time 类。
但是您的问题专门针对 Java 6 和 Java 7 的这些类的后向端口。因此,我使用该ThreeTen-Backport项目库尝试了以下示例。
package com.example.threetenbp.example;
import org.threeten.bp.*;
import org.threeten.bp.format.*;
import java.util.Locale;
/**
* By Basil Bourque.
*/
public class App {
public static void main ( String[] args ) {
App app = new App ( );
app.doIt ( );
}
private void doIt ( ) {
String input = "Tue, 16 May 2017 13:02:16 GMT";
DateTimeFormatter parseFormatter = DateTimeFormatter.ofPattern ( "EEE, dd MMM yyyy HH:mm:ss z" , Locale.ENGLISH );
ZonedDateTime parsedDate = ZonedDateTime.parse ( input , parseFormatter );
System.out.println ("parsedDate.toString(): " + parsedDate );
}
}
在 macOS Sierra 10.12.4 上使用 IntellJ 2017.1.x 为 Java 8 构建和运行时,我得到了一个奇怪的结果。我没有得到我的预期Z
或Z[GMT]
最后的结果,而是得到了利比里亚的时区Africa/Monrovia
。这是有效的,因为与 UTC 的偏移量确实为零(与 UTC/GMT 相同)。但这不是我们在 IdeOne.com上看到的 Java 8 类2017-05-16T13:02:16Z[GMT]
。
parsedDate.toString(): 2017-05-16T13:02:16Z[非洲/蒙罗维亚]
我没有 Java 6 或 Java 7 的实现可供我使用。但我确实尝试在 IntelliJ 中设置我的构建字节码设置以使用 Java 6。结果相同。