ホームページ  >  記事  >  Java  >  Java 8 のオフセットにコロンが欠落している ISO 8601 日付を解析するにはどうすればよいですか?

Java 8 のオフセットにコロンが欠落している ISO 8601 日付を解析するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 21:30:30398ブラウズ

How to Parse ISO 8601 Dates with Missing Colon in Offset in Java 8?

オフセットにコロンがない ISO 8601 形式のデータの解析

問題

Java 8 の DateTimeFormatter は、時間と時間の間にコロンが欠落している ISO 8601 文字列を解析するのに苦労します。オフセットに分が含まれているため、ユーザーが「2018-02-13T10:20:12.120 0000」のような文字列を Java 8 日付に変換しようとすると困難が生じます。

解決策

Java 8 までバグ修正:

Java 8 のバグが解決されるまでは、次の回避策を使用してください:

OffsetDateTime.parse( 
    "2018-02-13T10:20:12.120+0000" , 
    DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" )
)

Java 8 バグ修正後:

OffsetDateTime.parse( "2018-02-13T10:20:12.120+0000" )

詳細な説明

間違ったクラスの使用法

最新の java.time クラスを優先し、Date、Calendar、SimpleDateFormat などのレガシー クラスの使用を避けてください。 🎜>

オフセットのみの値には OffsetDateTime を使用します

オフセットはあるがタイム ゾーンがない値の場合は、OffsetDateTime を使用します。 ISO 8601 文字列は通常、java.time クラスで使用される標準形式に準拠しています。ただし、Java 8 のバグには回避策が必要です:

Hacky Workaround

入力文字列を操作して、欠落しているコロンを含めます:

String input = "2018-02-13T10:20:12.120+0000".replace( "+0000" , "+00:00" );
OffsetDateTime odt = OffsetDateTime.parse( input );

より確実な回避策

明示的なパターンで DateTimeFormatter を定義します。

String input = "2018-02-13T10:20:12.120+0000" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSX" );
OffsetDateTime odt = OffsetDateTime.parse( input , f );

追加の考慮事項

    常にコロンと時間と分の両方のオフセットを使用します。
  • UTC の値を表すインスタント オブジェクトを抽出します。
  • タイム ゾーンを適用して、特定の地域の実時計の時間のレンズを通して瞬間を表示します。
Java 8 のバグについて

Java 8 のバグは、時間と分の間のコロンが欠落しているオフセットの解析に影響します。この問題は、0000 などのオフセットには影響しますが、00:00 には影響しません。

Java.time

java.time クラスは従来の日付クラスに取って代わり、Java 8 以降に組み込まれています。これらは、より現代的で効率的な日付時刻処理機能を提供します。

以上がJava 8 のオフセットにコロンが欠落している ISO 8601 日付を解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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