3

を使用しZonedDateTimeて、タイムゾーンに従って現在の時刻を解析および取得しています。

次を解析するStringと、解析は成功しますが、出力Stringが異なります。何故ですか?

String dateTimeString = "2016-05-04T12:58:22+01:00[Europe/Paris]";
ZonedDateTime dateTime = ZonedDateTime.parse(dateTimeString, ISO_ZONED_DATE_TIME);
System.out.println(dateTimeString);
System.out.println(dateTime.toString());

出力

2016-05-04T12:58:22+01:00[Europe/Paris]
2016-05-04T12:58:22+02:00[Europe/Paris]

どの時点で変更+1が決定され+2、例外がスローされなかったのはなぜですか?

括弧内のパラメーターはオプションであることは理解しています[Europe/Paris]が、ここではオフセットよりも優先されます。

一方、次のコード

String dateTimeString = "2016-05-04T12:58:22+01:00";
ZonedDateTime dateTime = ZonedDateTime.parse(dateTimeString, ISO_ZONED_DATE_TIME);
System.out.println(dateTimeString);
System.out.println(dateTime.toString());

出力を生成する

2016-05-04T12:58:22+01:00
2016-05-04T12:58:22+01:00
4

2 に答える 2

6

問題は、2016-05-04T12:58:22+01:00[Europe/Paris]3 月の最後の日曜日に始まる 5 月の CEST (中央ヨーロッパ夏時間、夏時間) があるため、これは正確な時間ではないことです。UTC と比較して +2h です。確か2016-05-04T12:58:22+02:00[Europe/Paris]に正しいです。

おっしゃるとおり[Europe/Paris]優先順位が高いようです。仕様に関して例外があるべきかどうかはわかりませんが、私はそれを疑います.

別の言い方をすれ2016-05-04T12:58:22+01:00ば、タイムゾーンにいることはできませんEurope/Paris

于 2016-05-06T08:38:50.487 に答える