ホームページ  >  記事  >  Java  >  SimpleDateFormat を使用して Java で「Z」リテラルを含む日付を正しく解析する方法

SimpleDateFormat を使用して Java で「Z」リテラルを含む日付を正しく解析する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-04 02:26:021000ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。