Maison  >  Article  >  Java  >  Pourquoi le package « java.time » de Java 8 ne parvient-il pas à analyser les valeurs de fraction de seconde en mode strict ?

Pourquoi le package « java.time » de Java 8 ne parvient-il pas à analyser les valeurs de fraction de seconde en mode strict ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 00:35:31498parcourir

Why Does Java 8's `java.time` Package Fail to Parse Fraction-of-Second Values in Strict Mode?

Java.time ne parvient-il pas à analyser une fraction de seconde ?

Avec la version initiale de Java 8, l'analyse d'une fraction de seconde à l'aide de java.time Le package peut rencontrer une exception. Considérez ce code :

<code class="java">String input = "2011120312345655";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSS");
LocalDateTime localDateTime = LocalDateTime.parse(input, formatter);</code>

Ce code échoue avec une exception :

java.time.format.DateTimeParseException

La documentation indique que le mode strict nécessite le même nombre de caractères de format que les chiffres d'entrée. Cependant, le code inclut « SS » pour fraction de seconde, ce qui contredit le nombre de chiffres saisis.

Pour résoudre ce problème, une solution de contournement a été suggérée :

<code class="java">DateTimeFormatter dtf =
  new DateTimeFormatterBuilder()
  .appendPattern("yyyyMMddHHmmss")
  .appendValue(ChronoField.MILLI_OF_SECOND, 3)
  .toFormatter();</code>

Toutefois, cette solution de contournement ne couvre pas entièrement le cas d’utilisation de seulement deux symboles de modèle « S ». D'autres champs comme MICRO_OF_SECOND (six SSSSSS) ou NANO_OF_SECOND (neuf SSSSSSSSSS) doivent être utilisés.

Selon la documentation :

"Fraction : génère le champ nano-de-seconde sous forme de fraction- de seconde. (...) Lors de l'analyse en mode strict, le nombre de chiffres analysés doit correspondre au nombre de lettres de modèle. "

Cela implique que "S" représente n'importe quelle fraction de seconde, pas seulement des millisecondes. .

Résolution en Java 9

Depuis Java 9, le problème a été résolu. La version initiale de Java 8 a rencontré des difficultés lors de la mise en œuvre de l'analyse des valeurs adjacentes pour les parties fractionnaires. Cette limitation entravait l'interprétation des champs dans un texte qui s'étendaient sur plusieurs champs sans limites claires.

Cependant, dans Java 9, l'analyseur JSR-310 a acquis la capacité d'analyser des parties fractionnaires dans l'analyse de valeurs adjacentes. Cette amélioration répond aux défis rencontrés dans les versions précédentes et offre une flexibilité accrue lors de l'utilisation de valeurs de fractions de seconde.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn