Maison  >  Article  >  Java  >  Pourquoi java.time ne parvient-il pas à analyser une fraction de seconde malgré la documentation ?

Pourquoi java.time ne parvient-il pas à analyser une fraction de seconde malgré la documentation ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 12:57:02103parcourir

Why Does java.time Fail to Parse Fraction-of-Second Despite Documentation?

java.time Impossible d'analyser la fraction de seconde

Malgré le respect de la documentation, analyse de la fraction de seconde avec Java. le temps rencontre des problèmes. Cet article explore le problème et propose des solutions alternatives jusqu'à ce que le problème soit résolu.

Le problème

Lors de l'utilisation de DateTimeFormatter pour analyser une chaîne avec une fraction de seconde (représentée par "SS"), une exception est levée. Ce comportement contredit l'affirmation de la documentation selon laquelle le mode strict fait correspondre le nombre de caractères de format aux chiffres saisis.

Solutions de contournement possibles

Jusqu'à ce que Java 9 (ou version ultérieure) résolve ce problème, plusieurs solutions de contournement sont disponibles :

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

Remarque : Cette approche ne peut pas gérer les cas avec seulement deux symboles de modèle (par exemple, "SS").

  • Utilisez SimpleDateFormat :
<code class="java">String input = "2011120312345655";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
Date d = sdf.parse(input);</code>

Cependant, cette solution de contournement peut également mal interpréter une fraction de -valeurs en secondes.

  • Utilisez des bibliothèques tierces :

Les bibliothèques externes comme Joda-Time ou Time4J prennent en charge l'analyse en fractions de seconde. Par exemple, en utilisant Joda-Time :

<code class="java">String input = "2011120312345655";
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyyMMddHHmmssSS");
System.out.println(dtf.parseLocalDateTime(input));</code>

Hacky Solutions :

On pourrait extraire manuellement la partie fractionnaire de la chaîne d'entrée et appliquer des ajustements, mais cette approche est sujet aux erreurs.

Conclusion

L'analyse des valeurs de fraction de seconde à l'aide de java.time a actuellement des limites. Jusqu'à ce que Java 9 résolve ce problème, les utilisateurs peuvent utiliser les solutions de contournement décrites ci-dessus. Il convient également de noter que SimpleDateFormat peut également mal interpréter les valeurs en fractions de seconde. Pour des résultats définitifs, il est recommandé d'utiliser des bibliothèques externes comme Joda-Time ou Time4J.

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