LocalDate:解析MM-yyyy

时间:2017-09-20 13:14:56

标签: java date parsing java-8 java-time

尝试执行以下操作后,我得到encodePretty

java.time.format.DateTimeParseException

有什么问题? Java中是否有用于检查dateString格式的实用程序?

2 个答案:

答案 0 :(得分:15)

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.DateTimeFormatterBuilderjava.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就足够了(它已经检查解析后的值是否有效)。

答案 1 :(得分:-1)

这不是创建localDate对象的有效/足够信息,这是代码失败的原因......

改为

persisited

或以任何其他方式添加日信息