Parse date-only as LocalDateTime in Java 8

前端 未结 3 1661
我在风中等你
我在风中等你 2020-12-20 19:09

I need to parse a field which is sometimes given as a date and sometimes as a date/time. Is it possible to use single datatype for this using Java 8 time API? Currently, I a

3条回答
  •  一个人的身影
    2020-12-20 19:49

    Just create custom formatter with the builder DateTimeFormatterBuilder

    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
            .appendPattern("yyyy-MM-dd[ HH:mm:ss]")
            .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
            .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
            .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
            .toFormatter();
    

    This formatter uses the [] brackets to allow optional parts in the format, and adds the default values for hour HOUR_OF_DAY, minute MINUTE_OF_HOUR and second SECOND_OF_MINUTE.

    note: you can ommit, minutes and seconds, just providing the hour is enough.

    And use it as usual.

    LocalDateTime localDateTime1 = LocalDateTime.parse("1994-05-13", formatter);
    LocalDateTime localDateTime2 = LocalDateTime.parse("1994-05-13 23:00:00", formatter);
    

    This outputs the correct date time with default hours of 0 (starting of the day).

    System.out.println(localDateTime1); // 1994-05-13T00:00
    System.out.println(localDateTime2); // 1994-05-13T23:00
    

提交回复
热议问题