6

表現

OffsetDateTime.parse("2016-08-24T18:38:05.507+0000")

次のエラーが発生します。

java.time.format.DateTimeParseException: テキスト '2016-08-24T18:38:05.507+0000' をインデックス 23 で解析できませんでした

一方で、

OffsetDateTime.parse("2016-08-24T18:38:05.507+00:00")

期待どおりに動作します。

DateTimeFormatter のドキュメント ページでは、例としてコロンのないゾーン オフセットについて言及しています。私は何を間違っていますか?Javaをなだめるために日付文字列を台無しにしたくありません。

4

5 に答える 5

2

のパターン言語は、コロンなしの形式に対応できないゾーン オフセットのコードを提供しませんがDateTimeFormatter、ゾーン オフセットを処理する定義済みのインスタンスがコロンなしの形式を受け入れることを意味するわけではありません。ZoneOffset.getId() のドキュメントで説明されているように、引数が 1 つのバージョンのは、そのフォーマッタとしてOffsetDateTime.parse()使用することを指定しDateTimeFormatter.ISO_OFFSET_DATE_TIME、そのフォーマッタのドキュメントでは、3 つの形式をサポートすることを指定しています。これらの形式 (ISO-8601 から抽出されたもの) はどれも、コロンのない形式と一致しません。

OffsetDateTime.parse()しかし、心配する必要はありません。適切なフォーマッタを提供するof の 2 つの引数を使用するだけです。これは少し不便ですが、かなり実行可能です。

于 2016-08-24T22:31:41.410 に答える
1

DateTimeFormatter.ISO_OFFSET_DATE_TIMEデフォルトの形式は、ゾーン オフセットの次の値で定義されることが期待されます。

static final OffsetIdPrinterParser INSTANCE_ID_Z = new OffsetIdPrinterParser("+HH:MM:ss", "Z");
于 2016-08-24T22:30:48.490 に答える