Java LocalDateTime разбор

Саймон Laing:

Почему я могу разобрать строку времени даты в Java с некорректным часом? Что я пропустил или нужно сделать, чтобы убедиться, что он выдает ошибку соответствующим образом.

Следующий код не выдаст ошибку, где он должен?

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss");
LocalDateTime aFormattedDate = LocalDateTime.parse("2019-01-01T24:00:00", dateTimeFormatter); // returns  2019-01-02T00:00:00, should throw an error

Указание час в 25, или в том числе и любую миллисекунды или другой компонент времени делает причину parseбросить ошибку.

В то время как

LocalDateTime aDate = LocalDateTime.parse("2019-01-01T24:00:00"); //throws an error

Имеет ли выдаст ошибку - о HourOfDay должна находиться в диапазоне от 0 до 23 - как и ожидалось

Чарльз Dowbecki:

ResolverStyle

Поскольку по DateTimeFormatter.ofPattern()умолчанию в ResolverStyle.SMARTслучае , если стиль распознаватель не указан. SMARTпозволяет некоторым conversionse.g. 24:00:00будет преобразован в следующий день , но 24:00:01будет сгенерировано исключение. Согласно перечислений Javadoc:

Стиль к датам решительности и времени в интеллектуальной, или умной, манере.

Использование смарта-разрешения будет выполнять разумное значение по умолчанию для каждого поля, которое может быть таким же, как строгие, так же, как мягко, или третье поведением. Отдельные поля будут интерпретировать это по-разному.

Например, разрешение год-месяц и день-месяц в календарной системе ISO, используя интеллектуальный режим гарантирует, что день-месяц составляет от 1 до 31, превращая любое значение за последний действительный день-месяц, чтобы быть последний действительный день-месяц.

LocalDateTime.parse()использует ResolveStyle.STRICTпод капотом , что делает его эквивалент:

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss")
                                         .withResolverStyle(ResolverStyle.STRICT);
LocalDateTime.parse("2019-01-01T24:00:00", fmt); // DateTimeParseException

рекомендация

отhttp://43.154.161.224:23101/article/api/json?id=188404&siteId=1