无法将年月字符串解析为LocalDate

问题描述 投票:0回答:1

我在尝试在以下代码中传递日期 2024-12 时收到此错误:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM");
LocalDate expiration = LocalDate.parse(exp, formatter);

错误:

java.time.format.DateTimeParseException:无法解析文本“2024-12”:无法从 TemporalAccessor 获取 LocalDateTime:{Year=2024,MonthOfYear=12},类型为 java.time.format.Parsed 的 ISO

我什至尝试使用 yyyy-MM 格式,但仍然遇到相同的错误

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
LocalDate expiration = LocalDate.parse(exp, formatter);

java localdate
1个回答
0
投票

tl;博士

YearMonth.parse( "2024-12" )

LocalDate

您的输入

2024-12
代表年份和月份。相反,
LocalDate
代表年、月、日。因此,您的输入缺乏足够的信息来构造
LocalDate
对象。

YearMonth

Java 8+ 提供了

YearMonth
类来表示一年和一个月。

YearMonth ym = YearMonth.parse( "2024-12" ) ;

请注意,您的输入不需要指定的格式模式。您的输入已采用默认使用的标准 ISO 8601 格式。

日期

从该年与月对象中,您可以确定日期。

LocalDate firstOfMonth = ym.atDay( 1 ) ;
LocalDate lastOfMonth = ym.atEndOfMonth() ;

获取该月的日期列表。

SequencedCollection< LocalDate > datesOfMonth = 
    ym.atDay( 1 )              // Start with the first of the month, inclusive.
    .datesUntil(               // Ending is *exclusive* (Half-Open), so we need the first of following month to end up with all the days of the month. 
        ym
            .plusMonths( 1 )   // Next month.
            .atDay( 1 )        // First of next month. 
    )                          // Returns a `Stream` of `LocalDate` objects, one for each day of month.
    .toList() ;                // Collect the objects of that stream into a `List`, which is a sub-interface of `SequencedCollection`. 

长度

您还可以计算该月的天数。

int days = ym.lengthOfMonth() ;
© www.soinside.com 2019 - 2024. All rights reserved.