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