【问题标题】:SimpleDateFormat causing unparseable errorSimpleDateFormat 导致无法解析的错误
【发布时间】:2020-04-13 08:43:44
【问题描述】:

我有点使用以下来源来创建自己的 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");
    }

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

java.text.ParseException: Unparseable date: "Mon, 19 Dec 2019 11:32:04 +0000"

任何帮助都会很棒!

编辑:我使用的是 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));
    }
}

在完整的错误信息之后:

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

进程以退出代码 1 结束

【问题讨论】:

  • 试试 SimpleDateFormat("yyyy-MMM-dd HH:mm:ss"); dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
  • 不太确定问题的原因,但是您的代码似乎在 repl.it 上运行。看看this 另外,可能不是问题的原因,但星期一不会是12 月 19 日
  • 看这里2019-dec-19Thursday 但不是星期一,也不要使用SimpleDateFormat 你可以使用java OffsetDateTime.parse("Thu, 19 Dec 2019 11:32:04 +0000",formatter) 中最新的datetime api
  • 我建议你不要使用SimpleDateFormatDate。这些类设计不良且过时,尤其是前者,尤其是出了名的麻烦。所以扔掉你的第一个 sn-p 并努力让第二个工作。
  • 相关:java DateTimeFormatterBuilder fails on testtime(但更喜欢下面的好答案)。

标签: java simpledateformat java-13 unparseable


【解决方案1】:

您应该使用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));
}

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

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

【讨论】:

  • 很好的答案。非常好的工作代码和对问题中问题的正确解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多