How to unify date format using DateTimeFormatter

前端 未结 4 980
盖世英雄少女心
盖世英雄少女心 2020-12-20 02:20

I need to parse different time format into BASIC_ISO_DATE. Right now, there are 4 types of date format:

  • 2016-10-01 (ISO_LOCAL_DATE)<
4条回答
  •  渐次进展
    2020-12-20 03:00

    You could build your own DateTimeFormatter.

    DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder()
      .appendOptional(DateTimeFormatter.ISO_ZONED_DATE_TIME)
      .appendOptional(DateTimeFormatter.ISO_LOCAL_DATE)
      .appendOptional(new DateTimeFormatterBuilder()
        .appendValue(ChronoField.YEAR, 4)
        .optionalStart()
          .appendValue(ChronoField.MONTH_OF_YEAR)
        .optionalEnd()
        .appendLiteral('T')
        .parseDefaulting(ChronoField.MONTH_OF_YEAR, 1L)
        .parseDefaulting(ChronoField.DAY_OF_MONTH, 1L)
        .toFormatter())
      .toFormatter();
    String[] strings = {"2016-10-01", "2016T", "201610T", "2016-02-07T22:03:39.937Z"};
    for (String s : strings) {
      System.out.println(LocalDate.parse(s, dateTimeFormatter)
            .format(DateTimeFormatter.BASIC_ISO_DATE));
    }
    

提交回复
热议问题