SimpleDateFormat 导致无法解析的错误

Tak*_*aka 3 java simpledateformat unparseable java-13

我有点使用以下源来创建我自己的 sdf 模式:https : //docs.oracle.com/en/java/javase/13/docs/api/java.base/java/text/SimpleDateFormat.html

很遗憾

    SimpleDateFormat mFormatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z");
    ...
    private Date getLatestTimeStamp() throws ParseException {
         return mFormatter.parse("Mon, 19 Dec 2019 11:32:04 +0000");
    }
Run Code Online (Sandbox Code Playgroud)

导致以下错误,我不明白为什么:

java.text.ParseException: Unparseable date: "Mon, 19 Dec 2019 11:32:04 +0000"
Run Code Online (Sandbox Code Playgroud)

任何帮助都是极好的!

编辑:我正在使用 JDK 13

编辑2:

因此,我清理了我的代码,创建了一个新项目,但它仍然无法正常工作:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

public class Main {

    public static void main(String[] args) {

        String source = "Thu, 19 Dec 2019 11:32:04 +0000";
        DateTimeFormatter mFormatter = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss Z");

       System.out.println(OffsetDateTime.parse(source, mFormatter));
    }
}
Run Code Online (Sandbox Code Playgroud)

按照完整的错误消息:

线程“main”中的异常 java.time.format.DateTimeParseException: Text 'Thu, 19 Dec 2019 11:32:04 +0000' 无法在 java.base/java.time.format.DateTimeFormatter.parseResolved0 的索引 0 处解析(DateTimeFormatter.java:2049) at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1951) at java.base/java.time.OffsetDateTime.parse(OffsetDateTime.java:402) at main。 java.de.taka.main.Main.main(Main.java:15)

进程以退出代码 1 结束

Rub*_*nDG 5

您应该使用RFC_1123_DATE_TIME格式化程序。

public static void main(String[] args) {
    String source = "Thu, 19 Dec 2019 11:32:04 +0000";
    DateTimeFormatter mFormatter = DateTimeFormatter.RFC_1123_DATE_TIME;

    System.out.println(OffsetDateTime.parse(source, mFormatter));
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你的模式很好,你应该添加.withLocale().

DateTimeFormatter mFormatter = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss Z").withLocale(Locale.US);
Run Code Online (Sandbox Code Playgroud)

  • 非常好的答案。非常好的工作代码和对问题中错误的正确解释。 (2认同)