Maison > Java > javaDidacticiel > Pourquoi est-il difficile d'analyser les chaînes ISO 8601 dans Java 8 lorsque le décalage n'a pas de deux-points ?

Pourquoi est-il difficile d'analyser les chaînes ISO 8601 dans Java 8 lorsque le décalage n'a pas de deux-points ?

Susan Sarandon
Libérer: 2024-10-31 02:37:29
original
375 Les gens l'ont consulté

Why Is It Difficult to Parse ISO 8601 Strings in Java 8 When the Offset Lacks a Colon?

Difficulté à analyser la chaîne ISO 8601 dans Java 8 : deux points manquants dans le décalage

La fonctionnalité d'analyse de date et d'heure de Java peut être frustrante, en particulier lorsqu'il s'agit de avec des chaînes au format ISO 8601 sans deux-points dans le décalage. Explorons ce problème et proposons des solutions à l'aide de la nouvelle API java.time.

Description du problème :

Lors de la tentative d'analyse d'une chaîne de date telle que "2018-02-13T10 :20:12.120 0000" en utilisant l'ancienne classe java.util.Date, le processus réussit sans problème.

Date date = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZZZ")
                      .parse("2018-02-13T10:20:12.120+0000");
Copier après la connexion

Cependant, le même format échoue lors de l'utilisation de la nouvelle classe ZonedDateTime de java.time.

ZonedDateTime dateTime = ZonedDateTime.parse("2018-02-13T10:20:12.120+0000",
                   DateTimeFormatter.ofPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZZZ"));
Copier après la connexion

Solution :

Le problème réside dans l'utilisation d'une classe incorrecte pour l'analyse. Au lieu de ZonedDateTime, qui représente un fuseau horaire complet, vous devez utiliser OffsetDateTime pour les cas impliquant uniquement un décalage par rapport à UTC.

OffsetDateTime odt = OffsetDateTime.parse( 
    "2018-02-13T10:20:12.120+0000" , 
    DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" )
);
Copier après la connexion

Solution de contournement temporaire du bug :

Malheureusement , en raison d'un bug dans Java 8, vous pourriez rencontrer des problèmes lors de l'analyse des chaînes de décalage qui omettent les deux-points entre les heures et les minutes. Pour contourner le problème, vous pouvez effectuer l'une des opérations suivantes :

  1. Pirater : Remplacez les deux-points manquants dans la chaîne d'entrée.

    String input = "2018-02-13T10:20:12.120+0000".replace( "+0000" , "+00:00" );
    Copier après la connexion
  2. Définir un modèle de formatage :Utilisez un modèle de formatage explicite lors de la construction du DateTimeFormatter.

    String input = "2018-02-13T10:20:12.120+0000" ;
    DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" );
    Copier après la connexion

Considérations supplémentaires :

Si vous avez besoin d'une valeur en UTC, extrayez un objet Instant. Pour une heure localisée, appliquez un fuseau horaire à l'aide de la classe ZonedDateTime.

Conclusion :

En comprenant les classes appropriées et en gérant les bugs, vous pouvez analyser et manipuler efficacement les dates au format ISO 8601 en utilisant l'API java.time. N'oubliez pas d'utiliser les classes les plus récentes autant que possible pour éviter les problèmes de formatage de date hérités.

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