我在这种模式下使用日期 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();
}
有人可以帮我解决这个问题吗?
谢谢。
答案 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"))