【问题标题】:LocalDate: parse MM-yyyyLocalDate:解析 MM-yyyy
【发布时间】:2018-03-01 13:48:46
【问题描述】:

我在尝试执行以下操作后得到java.time.format.DateTimeParseException:

LocalDate.parse( "09-2017" , DateTimeFormatter.ofPattern("MM-yyyy") )

怎么了? Java 中是否有任何实用程序来检查 dateString 格式?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-07-05
      • 2017-08-16
      • 2019-11-09
      • 2021-12-25
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多