Maison  >  Article  >  Java  >  Comment analyser les dates ISO 8601 avec deux points manquants dans le décalage dans Java 8 ?

Comment analyser les dates ISO 8601 avec deux points manquants dans le décalage dans Java 8 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-02 21:30:30404parcourir

How to Parse ISO 8601 Dates with Missing Colon in Offset in Java 8?

Analyse des données au format ISO 8601 sans deux-points dans le décalage

Problème

DateTimeFormatter de Java 8 a du mal à analyser les chaînes ISO 8601 dépourvues de deux-points entre les heures et minutes de décalage, ce qui entraîne des difficultés pour les utilisateurs qui tentent de convertir des chaînes telles que "2018-02-13T10:20:12.120 0000" dans les dates Java 8.

Solution

Jusqu'à la correction du bug Java 8 :

Jusqu'au le bug dans Java 8 est résolu, utilisez ce qui suit solution de contournement :

OffsetDateTime.parse( 
    "2018-02-13T10:20:12.120+0000" , 
    DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" )
)

Après la correction d'un bug de Java 8 :

OffsetDateTime.parse( "2018-02-13T10:20:12.120+0000" )

Explication détaillée

Utilisation incorrecte de la classe

Évitez d'utiliser des classes héritées telles que Date, Calendar et SimpleDateFormat en faveur du java.time moderne classes.

Utilisez OffsetDateTime pour les valeurs de décalage uniquement

Pour les valeurs avec des décalages mais sans fuseau horaire, utilisez OffsetDateTime. Les chaînes ISO 8601 sont généralement conformes aux formats standards utilisés par les classes java.time. Cependant, un bug dans Java 8 nécessite une solution de contournement :

Hacky Workaround

Manipulez la chaîne d'entrée pour inclure les deux-points manquants :

String input = "2018-02-13T10:20:12.120+0000".replace( "+0000" , "+00:00" );
OffsetDateTime odt = OffsetDateTime.parse( input );

Solution de contournement plus robuste

Définissez un DateTimeFormatter avec un explicite modèle :

String input = "2018-02-13T10:20:12.120+0000" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" );
OffsetDateTime odt = OffsetDateTime.parse( input , f );

Considérations supplémentaires

  • Utilisez toujours les décalages avec deux points et les heures et les minutes.
  • Extraire les objets instantanés pour représentent les valeurs en UTC.
  • Appliquez des fuseaux horaires pour visualiser les moments à travers le prisme de l'horloge murale de certaines régions. time.

À propos du bug Java 8

Le bug Java 8 affecte l'analyse des décalages manquant les deux points entre les heures et les minutes. Ce problème affecte les décalages tels que 0000 mais pas 00:00.

Java.time

Les classes java.time supplantent les classes de date héritées et sont intégrées à Java 8 et versions ultérieures. Ils offrent des capacités de gestion de date et d'heure plus modernes et plus efficaces.

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