当前位置: 首页 > 知识库问答 >
问题:

带有LocalDateTime的DateTimeParseException:无法从TemporalAccessor获取LocalDateTime

万俟棋
2023-03-14
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd HH:mm:ss");

LocalDateTime timeStamp = LocalDateTime.parse(string, formatter);

我不像本例中那样使用以周为基础的年份。

最后,与这里不同的是,我使用的是LocalDateTime,所以时区应该不是问题。但是,由于这可能是DateTimeFormatter中的一个bug,我尝试将格式化程序传递为'formatter.WithZone(zoneId.SystemDefault())'(建议的解决方法),结果导致了相同的异常。

共有1个答案

梅逸清
2023-03-14

LocalDateTime需要一年--否则格式化程序无法决定10月10日是在2016年还是在公元前452年。

您可以向DateTimeFormatter添加默认行为,例如:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .appendPattern("MMM dd HH:mm:ss")
        .parseDefaulting(ChronoField.YEAR_OF_ERA, 2016)
        .toFormatter(Locale.ENGLISH);

或者更灵活地默认为当前年份:

        .parseDefaulting(ChronoField.YEAR_OF_ERA, Year.now().getValue())
 类似资料: