3 回答

TA贡献1780条经验 获得超5个赞
从 java-8 开始,您可以使用ZonedDateTime输入日期的 with 模式,即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
默认情况下,LocalDateISO-8601 日历系统中没有时区,例如 2007-12-03。

TA贡献1864条经验 获得超2个赞
您已将格式化程序定义为“日期、月份、年份”的概念,然后尝试要求它解析根本不是这种格式的字符串。您需要制作一个可以格式化的格式化程序Sun Oct 01 00:00:00 EDT 2017
,dd-MMM-yyyy
显然不是。SimpleDateFormat 的 javadoc会告诉您需要使用什么字母组合。
一旦你掌握了这一点,就很容易了:用这个新的格式化程序进行解析,然后.format
用你的旧格式化程序(那个dd-MMM-yyyy
)进行调用。

TA贡献1812条经验 获得超5个赞
您双重创建 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"))
添加回答
举报