首页 > 解决方案 > LocalDate DateTimeFormatter 问题

问题描述

我已经阅读了手册,我完全不知道为什么这段代码不起作用。

    // Date Entered must be valid
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("MM/dd/yyyy")
            .withResolverStyle(ResolverStyle.STRICT);

    try {
        String dateEntered = lossDateMonth + "/" + lossDateDay + "/" + lossDateYear; // Slash to match UI

        System.out.println(dateEntered);
        LocalDate dateParsed = LocalDate.parse(dateEntered, dateTimeFormatter);

println 语句打印:07/29/2015

最后一行抛出异常:java.time.format.DateTimeParseException: Text '07/29/2015' could not be parse: Unable to get LocalDate from TemporalAccessor: {YearOfEra=2015, DayOfMonth=29, MonthOfYear=7},ISO java.time.format.Parsed 类型的

我阅读了这方面的手册,它说如果您尝试解决一个不存在的日期,例如 9 月 31 日,就会发生这种事情。即使在错误中,解析器似乎也明白我在问 2015 年 7 月 29 日,那么我在这里做错了什么?

标签: javalocaldate

解决方案


用 替换模式"MM/dd/yyyy""MM/dd/uuuu"看看DateTimeFormatterIsoChronology。问题是,当使用.withResolverStyle(ResolverStyle.STRICT)格式化程序时,需要一个由uuuuwhere yyyyis the year of era提供的年份的唯一标识符。这是为了严格验证这些值。uuuu唯一性是由可以为负的事实给出的。

看看这里这里这里的相关帖子。


推荐阅读