DateTimeFormatter с исключением генерации parseDefaulting

У меня есть

      private static final DateTimeFormatter DATE_PATTERN = new DateTimeFormatterBuilder()
    .appendPattern("yyyy-MM-dd[ ]['T'][HH:mm:ss][.SSSSSS][.SSSSS][.SSSS][.SSS][.SS][.S][X]")
    .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
    .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
    .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
    .parseDefaulting(ChronoField.MILLI_OF_SECOND, 0)
    .toFormatter()
    .withZone(ZoneOffset.UTC); // assume incoming is UTC

использован

      public static Function<String, String> getFormattedDate() {
  return dateTime -> {
    try {
      ZonedDateTime timeRemoved =
          ZonedDateTime.parse(dateTime, DATE_PATTERN).truncatedTo(ChronoUnit.DAYS);
      return DateTimeFormatter.ofPattern(DISPLAY_DATE_PATTERN).format(timeRemoved);
    } catch (Exception e) {
      return null;
    }
  };
}

с тестом, который не проходит

      public void test_data_patter_with_ms(){
  String formattedDate = DateTimeUtil.getFormattedDate().apply("2021-04-24T06:57:06.850");
  assertThat(formattedDate, is("2021-04-24T00:00:00Z"));
}

с исключением

java.time.format.DateTimeParseException: текст '2021-04-24T06:57:06.850' не может быть проанализирован: обнаружен конфликт: NanoOfSecond 850000000 отличается от NanoOfSecond 0 при разрешении MilliOfSecond

Если я закомментирую .parseDefaulting(ChronoField.MILLI_OF_SECOND, 0), это сработает, но я не совсем уверен, что понимаю, почему, и мне не нравится исправлять проблемы и не понимать, почему я это исправил.

0 ответов

Другие вопросы по тегам