Pourquoi puis-je analyser une chaîne de date heure en Java avec une heure non valide? Qu'est-ce que je manqué ou besoin de faire pour veiller à ce qu'il jette correctement une erreur.
Le code suivant ne jette pas une erreur, où il se doit?
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
Spécification de l'heure 25, ou y compris milliseconde ou tout autre composant de temps ne cause parse
à une erreur.
Tandis que
LocalDateTime aDate = LocalDateTime.parse("2019-01-01T24:00:00"); //throws an error
Ne jetez une erreur - au sujet HourOfDay doit être compris entre 0 et 23 - comme prévu
ResolverStyle
Parce que DateTimeFormatter.ofPattern()
par défaut ResolverStyle.SMART
si le style de résolveur n'est pas spécifié. SMART
permet une certaine conversionse.g. 24:00:00
sera convertie au lendemain , mais 24:00:01
jetteront une exception. Selon le ENUM javadoc:
Style de dates et heures résoudre dans une puce ou intelligente, de manière.
En utilisant la résolution intelligente interprétera la valeur par défaut raisonnable pour chaque champ, ce qui peut être le même que strict, le même que clément, ou un troisième comportement. Les champs individuels interpréteront différemment.
Par exemple, la résolution de l'année mois et le jour de mois dans le système de calendrier ISO en utilisant le mode intelligent fera en sorte que le jour de mois est de 1 à 31, la conversion de valeur au-delà de la dernière valide jour de mois pour être le dernier jour de mois valide.
LocalDateTime.parse()
utilise ResolveStyle.STRICT
sous le capot qui le rend équivalent à:
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss")
.withResolverStyle(ResolverStyle.STRICT);
LocalDateTime.parse("2019-01-01T24:00:00", fmt); // DateTimeParseException