LocalDate:解析MM-yyyy

Rud*_*koŭ 5 java parsing date java-8 java-time

我java.time.format.DateTimeParseException试图做以下事后得到:

LocalDate.parse( "09-2017" , DateTimeFormatter.ofPattern("MM-yyyy") )
Run Code Online (Sandbox Code Playgroud)

怎么了?Java中是否有用于检查dateString格式的实用程序?

小智 16

A LocalDate需要建立日,月和年.您的输入只有月份和年份.您必须选择任意一天并将其设置为已解析的对象以创建一个LocalDate.

您可以将其解析为a java.time.YearMonth,然后选择日期:

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("MM-yyyy");
YearMonth ym = YearMonth.parse("09-2017", fmt);
LocalDate dt = ym.atDay(1); // choose whatever day you want
Run Code Online (Sandbox Code Playgroud)

或者你可以使用一个java.time.format.DateTimeFormatterBuilder具有java.time.temporal.ChronoField定义为一天的默认值:

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
    // month-year
    .appendPattern("MM-yyyy")
    // default value for day
    .parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
    // create formatter
    .toFormatter();
LocalDate dt = LocalDate.parse("09-2017", fmt);
Run Code Online (Sandbox Code Playgroud)

PS:如果你只想检查输入是否正确,只需将其解析为a YearMonth就足够了(它已经检查解析的值是否有效).