将字符串格式化为java8 ZoneDateTime

将字符串格式化为java8 ZoneDateTime,java,date,formatting,Java,Date,Formatting,我无法将此字符串格式化为zoneDateTime对象。我试着遵循oracle文档,但失败了,我不知道应该怎么做 String date = "Sat Dec 01 20:56:28 CET 2018" DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z uuuu"); ZonedDateTime dateTime = ZonedDateTime.parse(date, formatter

我无法将此字符串格式化为
zoneDateTime
对象。我试着遵循oracle文档,但失败了,我不知道应该怎么做

String date = "Sat Dec 01 20:56:28 CET 2018"
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z uuuu");
ZonedDateTime dateTime = ZonedDateTime.parse(date, formatter);
我明白了


java.time.format.DateTimeParseException:无法在索引0处分析文本“Sat Dec 01 20:56:28 CET 2018”

指定a,以确定用于翻译月份名称等的人类语言

String date = "Sat Dec 01 20:56:28 CET 2018";
DateTimeFormatter formatter = 
    DateTimeFormatter.ofPattern(
        "EEE MMM dd HH:mm:ss z uuuu" , 
        Locale.US 
    )
;

ZonedDateTime dateTime = ZonedDateTime.parse(date, formatter);
System.out.println(dateTime);

失败的原因是什么???java.time.format.DateTimeParseException:无法在索引0处解析文本“Sat Dec 01 20:56:28 CET 2018”,顺便说一下,这是一种糟糕的格式。在可能的情况下,使用标准格式交换日期时间值。在解析/生成字符串时,java.time类默认使用标准格式。看起来您是从一个老式的
Date
对象解析
toString()
中的字符串?如果在您力所能及的范围内,请使用
Date.toInstant()
转换为现代类型,因为它更容易、更安全。解析三个字母的时区缩写可能在CET
CET
时有效,但在许多其他情况下会给出错误的结果。哇,没想到这会成为问题。谢谢Matel,谢谢Basil,谢谢你干净的编辑