Heim >Java >javaLernprogramm >Wie kann ich Datumsangaben mit dem \'Z\'-Literal in Java mithilfe von SimpleDateFormat korrekt analysieren?

Wie kann ich Datumsangaben mit dem \'Z\'-Literal in Java mithilfe von SimpleDateFormat korrekt analysieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-04 02:26:021064Durchsuche

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

SimpleDateFormat analysiert Datum mit „Z“-Literal

Beim Versuch, ein Datum im ISO 8601-Format mit SimpleDateFormat zu analysieren, schlägt die korrekte Analyse möglicherweise fehl Behandeln Sie das Literal „Z“, das UTC als bevorzugten Referenzpunkt angibt. Beispielsweise führt das Parsen der Zeichenfolge „2010-04-05T17:16:00Z“ mit dem Muster „yyyy-MM-dd'T'HH:mm:ss“ zu einer falschen Ortszeit.

Die Herkömmliche Muster „yyyy-MM-dd'T'HH:mm:ssz“ und „yyyy-MM-dd'T'HH:mm:ssZ“ reichen ebenfalls nicht aus, um Datumsangaben mit dem „Z“-Literal zu analysieren. Dieses Verhalten mag kontraintuitiv erscheinen, da das „Z“-Literal explizit UTC angibt.

Lösung

Vor Java 7 war für das Parsen von Datumsangaben mit dem „Z“-Literal eine explizite Einstellung erforderlich die TimeZone für das SimpleDateFormat-Objekt. In Java 7 und höher kann jedoch das Muster „yyyy-MM-dd'T'HH:mm:ssX“ verwendet werden, um das UTC-Zeitzonensuffix korrekt zu analysieren und anzuwenden.

Zum Beispiel:

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

Dadurch wird das Datum korrekt als UTC-Zeit analysiert.

Alternative

Eine weitere Alternative ist die Verwendung des in Java 8 eingeführten Pakets java.time , das eine modernere und umfassendere Datums- und Uhrzeit-API bietet. Der folgende Code demonstriert die Verwendung von java.time zum Analysieren des Datums:

<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>

Dieser Ansatz macht komplexe Muster oder explizite Zeitzoneneinstellungen überflüssig, da java.time nativ UTC-Zeitzonen verarbeitet.

Das obige ist der detaillierte Inhalt vonWie kann ich Datumsangaben mit dem \'Z\'-Literal in Java mithilfe von SimpleDateFormat korrekt analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn