Maison > Java > javaDidacticiel > le corps du texte

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
Libérer: 2024-11-02 00:35:31
original
596 Les gens l'ont consulté

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>
Copier après la connexion

Ce code échoue avec une exception :

java.time.format.DateTimeParseException
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal