Maison > Java > javaDidacticiel > Comment analyser correctement les dates avec le littéral « Z » en Java à l'aide de SimpleDateFormat ?

Comment analyser correctement les dates avec le littéral « Z » en Java à l'aide de SimpleDateFormat ?

Patricia Arquette
Libérer: 2024-11-04 02:26:02
original
1064 Les gens l'ont consulté

How to Correctly Parse Dates with 'Z' Literal in Java using SimpleDateFormat?

SimpleDateFormat analyse la date avec le littéral « Z »

Lorsque vous tentez d'analyser une date au format ISO 8601 à l'aide de SimpleDateFormat, il peut échouer correctement gérer le littéral « Z », qui désigne UTC comme point de référence préféré. Par exemple, l'analyse de la chaîne "2010-04-05T17:16:00Z" à l'aide du modèle "aaaa-MM-jj'T'HH:mm:ss" entraînera une heure locale incorrecte.

Le Les modèles traditionnels « aaaa-MM-jj'T'HH:mm:ssz » et « aaaa-MM-jj'T'HH:mm:ssZ » sont également insuffisants pour analyser les dates avec le littéral « Z ». Ce comportement peut sembler contre-intuitif puisque le littéral « Z » indique explicitement UTC.

Solution

Avant Java 7, l'analyse des dates avec le littéral « Z » nécessitait un réglage explicite le TimeZone sur l’objet SimpleDateFormat. Cependant, dans Java 7 et versions ultérieures, le modèle « aaaa-MM-jj'T'HH:mm:ssX » peut être utilisé pour analyser et appliquer correctement le suffixe de fuseau horaire UTC.

Par exemple :

<code class="java">SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
Date date = sdf.parse("2010-04-05T17:16:00Z");</code>
Copier après la connexion

Cela analysera correctement la date en tant qu'heure UTC.

Alternative

Une autre alternative consiste à utiliser le package java.time introduit dans Java 8 , qui fournit une API de date et d'heure plus moderne et plus complète. Le code suivant montre l'utilisation de java.time pour analyser la date :

<code class="java">import java.time.Instant;
import java.time.ZonedDateTime;

String dateString = "2010-04-05T17:16:00Z";
Instant instant = Instant.parse(dateString);
ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Z"));</code>
Copier après la connexion

Cette approche élimine le besoin de modèles complexes ou de paramètres de fuseau horaire explicites, car java.time gère nativement les fuseaux horaires UTC.

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