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), это сработает, но я не совсем уверен, что понимаю, почему, и мне не нравится исправлять проблемы и не понимать, почему я это исправил.