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!