LocalDate:解析 MM-yyyy
LocalDate: parse MM-yyyy
我在尝试执行以下操作后得到 java.time.format.DateTimeParseException
:
LocalDate.parse( "09-2017" , DateTimeFormatter.ofPattern("MM-yyyy") )
怎么了? Java 中是否有任何实用程序可以检查 dateString 格式?
一个LocalDate
需要构建年月日。您的输入只有月份和年份。您必须选择任意一天并将其设置为已解析的对象以创建 LocalDate
.
您可以将其解析为 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
或者您可以使用 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);
PS: 如果你只想检查输入是否正确,只需将其解析为 YearMonth
就足够了(它已经检查是否解析值有效)。
我在尝试执行以下操作后得到 java.time.format.DateTimeParseException
:
LocalDate.parse( "09-2017" , DateTimeFormatter.ofPattern("MM-yyyy") )
怎么了? Java 中是否有任何实用程序可以检查 dateString 格式?
一个LocalDate
需要构建年月日。您的输入只有月份和年份。您必须选择任意一天并将其设置为已解析的对象以创建 LocalDate
.
您可以将其解析为 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
或者您可以使用 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);
PS: 如果你只想检查输入是否正确,只需将其解析为 YearMonth
就足够了(它已经检查是否解析值有效)。