ホームページ > Java > &#&チュートリアル > オフセットにコロンがない場合、Java 8 で ISO 8601 文字列を解析するのが難しいのはなぜですか?

オフセットにコロンがない場合、Java 8 で ISO 8601 文字列を解析するのが難しいのはなぜですか?

Susan Sarandon
リリース: 2024-10-31 02:37:29
オリジナル
368 人が閲覧しました

Why Is It Difficult to Parse ISO 8601 Strings in Java 8 When the Offset Lacks a Colon?

Java 8 での ISO 8601 文字列の解析の困難: オフセットにコロンがありません

Java の日付と時刻の解析機能は、特に処理時にイライラすることがあります。オフセットにコロンが含まれていない ISO 8601 形式の文字列を使用します。この問題を調査し、新しい java.time API を使用して解決策を提供しましょう。

問題の説明:

「2018-02-13T10」のような日付文字列を解析しようとしたとき:20:12.120 0000" を従来の java.util.Date クラスを使用すると、プロセスはスムーズに成功します。

Date date = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZZZ")
                      .parse("2018-02-13T10:20:12.120+0000");
ログイン後にコピー

ただし、java.time.

の新しい ZonedDateTime クラスを使用すると、同じ形式で失敗します。
ZonedDateTime dateTime = ZonedDateTime.parse("2018-02-13T10:20:12.120+0000",
                   DateTimeFormatter.ofPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZZZ"));
ログイン後にコピー

解決策:

問題は、解析に間違ったクラスを使用していることにあります。フルタイムゾーンを表す ZonedDateTime の代わりに、UTC からのオフセットのみが関係する場合には OffsetDateTime を使用する必要があります。

OffsetDateTime odt = OffsetDateTime.parse( 
    "2018-02-13T10:20:12.120+0000" , 
    DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" )
);
ログイン後にコピー

一時的なバグ回避策:

残念ながらJava 8 のバグにより、時間と分の間のコロンを省略したオフセット文字列を解析するときに問題が発生する可能性があります。回避策として、次のいずれかを実行できます:

  1. ハック: 入力文字列内の欠落しているコロンを置き換えます。

    String input = "2018-02-13T10:20:12.120+0000".replace( "+0000" , "+00:00" );
    ログイン後にコピー
  2. 書式設定パターンの定義: DateTimeFormatter を構築するときは、明示的な書式設定パターンを使用します。

    String input = "2018-02-13T10:20:12.120+0000" ;
    DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" );
    ログイン後にコピー

その他の考慮事項:

UTC の値が必要な場合は、Instant オブジェクトを抽出します。ローカライズされた時刻については、ZonedDateTime クラスを使用してタイム ゾーンを適用します。

結論:

適切なクラスを理解し、バグを処理することで、日付を効率的に解析して操作できます。 java.time API を使用した ISO 8601 形式。従来の日付形式の問題を回避するために、可能な限り新しいクラスを使用することを忘れないでください。

以上がオフセットにコロンがない場合、Java 8 で ISO 8601 文字列を解析するのが難しいのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート