以下测试用例在 Java 10 下完美运行:
import java.time.Instant;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
class Test
{
public static void main (String[] args) throws java.lang.Exception
{
DateTimeFormatter dateFormatter = new DateTimeFormatterBuilder().
appendPattern("EEE, dd MMM yyyy HH:mm:ss zzz").
toFormatter();
Instant result = dateFormatter.parse("Sat, 29 Sep 2018 20:49:02 GMT", Instant::from);
System.out.println("Result: " + result);
}
}
但在 Java 11 下我得到:
Exception in thread "main" java.time.format.DateTimeParseException: Text 'Sat, 29 Sep 2018 20:49:02 GMT' could not be parsed at index 0
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2046)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
at Test.main(Test.java:13)
这是怎么回事?
更新:替换toFormatter()
为toFormatter(Locale.US)
修复问题。我猜这个问题与https://bugs.openjdk.java.net/browse/JDK-8206980有关。此问题在 Java 11 build 23 中标记为已修复,但我正在运行
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
这个版本不应该修复吗?
UPDATE2:如果您无法重现问题,请尝试替换toFormatter()
为toFormatter(Locale.CANADA)
.