无法解析自定义 Java 日期:是否可以将其设置为默认年份?

Unable to parse custom Java date: Can I set it to a default year?

提问人:erotsppa 提问时间:4/18/2023 最后编辑:Anonymouserotsppa 更新时间:4/18/2023 访问量:71

问:

DateTimeFormatter formatter2 = new DateTimeFormatterBuilder()
                    .appendPattern("h:mm a z - d MMMM")
                    .toFormatter()
                    .withLocale(Locale.US);

            String test = "7:00 PM EST - 14 April";
LocalDateTime date2 = LocalDateTime.parse(test, formatter2);

它引发此异常

java.time.format.DateTimeParseException:文本“美国东部时间晚上 7:00 - 4 月 14 日” 无法分析:无法从中获取 LocalDateTime TemporalAccessor:{DayOfMonth=14, MonthOfYear=4},ISO,America/New_York 解析为 19:00 类型为 java.time.format.Parsed

但是你可以看到它正确地解析了所有组件。问题出在哪里?

java 日期时间

评论

4赞 aled 4/18/2023
今年是哪一年?
1赞 erotsppa 4/18/2023
@aled哎呀!我可以将其设置为默认年份吗?
1赞 Basil Bourque 4/18/2023
编辑问题的标题和正文,以明确您正在询问如何在格式化程序中设置默认年份。

答:

3赞 MC Emperor 4/18/2023 #1

问题是 a 的构造需要一年的时间才能存在,但你的时间字符串不需要。LocalDateTime

如果缺少某些元素,则可以使用 指示 to 默认为某个值,使用 。DateTimeFormatterBuilderparseDefaulting

DateTimeFormatter formatter2 = new DateTimeFormatterBuilder()
    .parseDefaulting(ChronoField.YEAR, 2023)
    .appendPattern("h:mm a z - d MMMM")
    .toFormatter()
    .withLocale(Locale.US);

评论

0赞 MC Emperor 4/18/2023
对不起,我的错误。它应该是 .ChronoField