日時文字列をOffsetDateTime
として解析できないため、次のエラーが発生するのはなぜですか?なぜ、 `GMT + 8`はdocからまっすぐにコピーされたにもかかわらずパターン` O`で解析できないのですか?
String inputOdt = "2016-01-23T12:34:56 GMT+8";
DateTimeFormatter formatterOdt = DateTimeFormatter.ofPattern ("yyyy-MM-dd'T'HH:mm:ss O");
OffsetDateTime odt = OffsetDateTime.parse (inputOdt , formatterOdt);
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
をMac OS Xで使用する場合。El Capitan 10.11.4。
は、エラーが発生します。
Exception in thread "main" java.time.format.DateTimeParseException: Text '2016-01-23T12:34:56 GMT+8' could not be parsed: String index out of range: 25
offset-from-UTCストリングGMT+8
はDateTimeFormatter
のクラス・ドキュメントの例からコピー、貼り付けられています。引用すると:
Offset O: This formats the localized offset based on the number of pattern letters. One letter outputs the short form of the localized offset, which is localized offset text, such as 'GMT', with hour without leading zero, optional 2-digit minute and second if non-zero, and colon, for example 'GMT+8'.
を文字列の残りの部分はLocalDateTime
として成功裏に解析します。ですから、この問題は実際にはUTCからのオフセットと思われます。
String inputLdt = "2016-01-23T12:34:56";
DateTimeFormatter formatterLdt = DateTimeFormatter.ofPattern ("yyyy-MM-dd'T'HH:mm:ss");
LocalDateTime ldt = LocalDateTime.parse (inputLdt , formatterLdt);
System.out.println ("");
System.out.println ("inputLdt: " + inputLdt);
System.out.println ("ldt: " + ldt);
inputLdt: 2016-01-23T12:34:56
ldt: 2016-01-23T12:34:56
策
部分的な問題を回避するには、入力文字列と書式パターンの両方に末尾にスペースを追加することです。これはうまくいく。
String input = "Sat May 02 2015 00:00:00 GMT+08 "; // Trailing space.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("EEE MMM dd yyyy HH:mm:ss O "); // Trailing space.
OffsetDateTime odt = OffsetDateTime.parse (input , formatter); // SUCCEEDS
しかし、コロンなし分を追加すると、単一のO
での作業として文書化され、それが失敗しています。このような場合、末尾のSPACEの回避策は役立ちません。この例ではGMT+0800
であるのに対して、上に示したGMT+08
では、この例は失敗しますが、上の例は成功します。
String input = "Sat May 02 2015 00:00:00 GMT+0800 "; // Minutes in the offset, and trailing space.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("EEE MMM dd yyyy HH:mm:ss O "); // Trailing space.
OffsetDateTime odt = OffsetDateTime.parse (input , formatter); // FAILS
これは 'StringIndexOutOfBoundsException'が、私はこれはバグであると思わせるという事実をあなたはそれを得た –
@SotiriosDelimanolis:https://でバグを。 openjdk.java.net/browse/JDK-8154050 – Andreas
フォーマット文字列と解析するテキストの両方にスペースを追加するのが回避策のようです。 –