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
Patricia Arquetteoriginal
2024-11-04 02:26:021063parcourir

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>

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>

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!

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