SimpleDateFormat 'Z' リテラルを使用した日付の解析
SimpleDateFormat を使用して ISO 8601 形式の日付を解析しようとすると、正しく解析できない場合がありますUTC を優先参照点として示す「Z」リテラルを処理します。たとえば、パターン「yyyy-MM-dd'T'HH:mm:ss」を使用して文字列「2010-04-05T17:16:00Z」を解析すると、不正確な現地時間が返されます。
従来のパターン「yyyy-MM-dd'T'HH:mm:ssz」および「yyyy-MM-dd'T'HH:mm:ssZ」も、「Z」リテラルを含む日付を解析するには不十分です。 「Z」リテラルが明示的に UTC を示しているため、この動作は直感に反するように見えるかもしれません。
解決策
Java 7 より前では、「Z」リテラルを使用した日付の解析には明示的な設定が必要でした。 SimpleDateFormat オブジェクトの TimeZone。ただし、Java 7 以降では、パターン「yyyy-MM-dd'T'HH:mm:ssX」を利用して、UTC タイムゾーン サフィックスを正しく解析して適用できます。
例:
<code class="java">SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX"); Date date = sdf.parse("2010-04-05T17:16:00Z");</code>
これにより、日付が UTC 時間として正しく解析されます。
代替
もう 1 つの代替案は、Java 8 で導入された java.time パッケージを使用することです。 、より現代的で包括的な日付と時刻 API を提供します。次のコードは、java.time を使用して日付を解析する方法を示しています。
<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>
このアプローチでは、java.time が UTC タイム ゾーンをネイティブに処理するため、複雑なパターンや明示的なタイムゾーン設定の必要がなくなります。
以上がSimpleDateFormat を使用して Java で「Z」リテラルを含む日付を正しく解析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。