2

日付文字列「2015-01-12T13:00:00.000+02:00」があります。JavaDoc を見ると、次のように表示されます。

z       time-zone name              zone-name         Pacific Standard Time; PST
Z       zone-offset                 offset-Z          +0000; -0800; -08:00;


したがって、+02:00 で指定されたゾーン形式があるため、それを解析するには大文字の「Z」を使用する必要があると思われます。

DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000Z");

しかし、それで解析エラーが発生します。

小文字の「z」を使用すると機能します。

DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000z")


誰が何が起こっているのか知っていますか?


コード:

DateTimeFormatter changetimeParser_Z = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000Z");
DateTimeFormatter changetimeParser_z = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.000z");

String time = "2015-01-12T13:00:00.000+02:00";

ZonedDateTime time1 = ZonedDateTime.parse(time, changetimeParser_z);
System.out.println(time1);
ZonedDateTime time2 = ZonedDateTime.parse(time, changetimeParser_Z);

System.out.println(time2);


例外スタック トレース:

2015-01-12T13:00+02:00
java.time.format.DateTimeParseException: Text '2015-01-12T13:00:00.000+02:00' could not be parsed at index 23
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.ZonedDateTime.parse(ZonedDateTime.java:597)
4

1 に答える 1

5

Javadoc のエラーだと思いますが、この部分は間違いです

Symbol  Meaning                     Presentation      Examples<br>
------  -------                     ------------      -------
Z       zone-offset                 offset-Z          +0000; -0800; -08:00;

さらに読むと、オフセットの説明が見つかるからですZ

Offset Z : パターン文字の数に基づいてオフセットをフォーマットします。'+0130' のように、1 文字、2 文字、または 3 文字で時と分がコロンなしで出力されます。オフセットがゼロの場合、出力は「+0000」になります。4 文字は、Offset-O の 4 文字に相当する、ローカライズされたオフセットの完全な形式を出力します。オフセットがゼロの場合、出力は対応するローカライズされたオフセット テキストになります。5 文字は時、分を出力し、0 以外の場合はオプションで秒をコロン付きで出力します。オフセットがゼロの場合は「Z」を出力します。6 文字以上は IllegalArgumentException をスローします。

これはRFC 822に準拠しています。

私にとって、パターンはSimpleDateFormatの場合と同じように動作する必要があります

于 2016-03-31T08:01:33.570 に答える