Java8 LocalDateTime分析错误

Java8 LocalDateTime分析错误,java,parsing,datetime,java-8,java-time,Java,Parsing,Datetime,Java 8,Java Time,我试图使用java.time解析以下时间戳字符串03-feb-2014 13:16:31,但它抛出了一个错误。这是我的密码 String timestamp = "03-feb-2014 13:16:31"; DateTimeFormatter format; DateTimeFormatterBuilder formatBuilder = new DateTimeFormatterBuilder(); formatBuilder.parseCaseInsensitive(); form

我试图使用
java.time
解析以下时间戳字符串
03-feb-2014 13:16:31
,但它抛出了一个错误。这是我的密码

String timestamp = "03-feb-2014 13:16:31";

DateTimeFormatter format;
DateTimeFormatterBuilder formatBuilder = new DateTimeFormatterBuilder();
formatBuilder.parseCaseInsensitive();   
formatBuilder.append(DateTimeFormatter.ofPattern("dd-MMM-YYYY HH:mm:ss"));
format = formatBuilder.toFormatter();

LocalDateTime localdatetime = LocalDateTime.parse(timestamp, format);
但是我得到了以下错误

Exception in thread "main" java.time.format.DateTimeParseException: Text '03-feb-2014 13:16:31' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {DayOfMonth=3, MonthOfYear=2, WeekBasedYear[WeekFields[SUNDAY,1]]=2014},ISO resolved to 13:16:31 of type java.time.format.Parsed
    at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855)
    at java.time.LocalDateTime.parse(LocalDateTime.java:492)
    at com.target.util.CntrlmProcessor.main(CntrlmProcessor.java:24)
Caused by: java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: {DayOfMonth=3, MonthOfYear=2, WeekBasedYear[WeekFields[SUNDAY,1]]=2014},ISO resolved to 13:16:31 of type java.time.format.Parsed
    at java.time.LocalDateTime.from(LocalDateTime.java:461)
    at java.time.format.Parsed.query(Parsed.java:226)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
从错误中可以看出,库已经能够解析字符串,因为它从时间戳中分离出了所有字段,但似乎有一些我遗漏的内容


我试着只解析时间戳的时间部分,效果很好。

如果在模式中使用
yyyy
而不是
yyyy
,那么您给出的代码会起作用
YYYY
是“基于周的年”,通常仅在您还指定周数和星期几时使用(例如,
YYYY ww EEE
)。这是相当罕见的

请注意,即使只是“年”也有
yyyy
uuu
-
yyy
是“纪年”(在公历中总是非负的,并且总是正的),而
uuu
是一种“非纪年”—例如,5BCE是-4作为非纪年。如果您不需要处理普通纪元之前的日期(或其他日历系统中的日期),您可能不需要担心这一点

我还建议您将代码改写为:

DateTimeFormatter format = new DateTimeFormatterBuilder()
    .parseCaseInsensitive()
    .appendPattern("dd-MMM-yyyy HH:mm:ss")
    .toFormatter();

。。。为了简单起见。

这是一个很好的解释!此外,我还采纳了你的建议。:)