Java LocalDateTime análisis

Simon Laing:

¿Por qué puedo analizar una cadena de fecha y hora en Java con una hora no válida? ¿Qué he perdido o necesita hacer para asegurar que se genera un error de manera apropiada.

El siguiente código no arroja un error, cuando lo que debería?

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

Especificación de la hora 25, o incluso cualquier otro componente de milisegundos o el tiempo no causa parsepara lanzar un error.

donde como

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

No generará un error - sobre HourOfDay debe estar comprendida entre 0 y 23 - como se esperaba

Charles Dowbecki:

ResolverStyle

Debido a que DateTimeFormatter.ofPattern()por defecto ResolverStyle.SMARTsi no se especifica el estilo de resolución. SMARTpermite por alguna conversionse.g. 24:00:00se convertirá a al día siguiente pero 24:00:01será una excepción. Según el javadoc enumeración:

Estilo de fechas y resolver veces en un inteligente o inteligente, de forma.

El uso de resolución inteligente interpretará el valor por defecto razonable para cada campo, que puede ser el mismo que estricta, lo mismo que indulgente, o una tercera comportamiento. Los campos individuales interpretarán esto de manera diferente.

Por ejemplo, la resolución de año-mes y el día de mes en el sistema de calendario ISO usando el modo inteligente se asegurará de que el día de mes es de 1 a 31, la conversión de cualquier valor más allá del último día de mes-de-válidos para ser el último día de mes válida.

LocalDateTime.parse()utiliza ResolveStyle.STRICTbajo el capó que hace que sea equivalente a:

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=188416&siteId=1
Recomendado
Clasificación