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!