如何在Java中将日期字符串EEE MMM dd解析为yyyy-MM-dd

时间:2019-10-09 22:52:15

标签: java date java-8

我在这种模式下使用日期 EEEEE MMMMM yyyy HH:mm:ss.SSSZ ,我想用Java将其转换为yyyy-MM-dd格式,我尝试了以下方法但是我遇到了这个异常java.text.ParseException: Unparseable date:

   SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
    String dateInString = "Sun Oct 01 00:00:00 EDT 2017";

    try {

        Date date = formatter.parse(dateInString);
        System.out.println(date);
        System.out.println(formatter.format(date));

    } catch (ParseException e) {
        e.printStackTrace();
    }

有人可以帮我解决这个问题吗?

谢谢。

4 个答案:

答案 0 :(得分:3)

在Java-8中,您可以将ZonedDateTime与输入日期的模式一起使用,EEE MMM dd HH:mm:ss zzz yyyy

String dateInString = "Sun Oct 01 00:00:00 EDT 2017";

ZonedDateTime time = ZonedDateTime.parse(dateInString,DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy"));
System.out.println(time.toLocalDate());   //2017-10-01

默认情况下,LocalDate在ISO-8601日历系统中没有时区,例如2007-12-03。

答案 1 :(得分:1)

您已将格式器定义为“日期,月,年”概念,然后尝试要求其解析根本不是这种格式的字符串。您需要制作一个可以格式化Sun Oct 01 00:00:00 EDT 2017的格式化程序,而dd-MMM-yyyy显然不是。 javadoc of SimpleDateFormat会告诉您您需要使用哪种字母组合。

一旦掌握了这些,就很容易:使用这种新的格式化程序进行解析,然后使用旧的格式化程序(.format进行调用)dd-MMM-yyyy

答案 2 :(得分:0)

解析和格式化不能使用相同的格式化程序。查看此答案:https://stackoverflow.com/a/999191

答案 3 :(得分:0)

您双重创建DateFormat一次解析,一次创建一次

DateFormat dfParse = new SimpleDateFormat("EEEEE MMMMM yyyy HH:mm:ss.SSSZ");
DateFormat dfFormat = new SimpleDateFormat("yyyy-MM-dd");
dfFormat.format(dfParse.parse("Sun Oct 01 00:00:00 EDT 2017"))