ホームページ  >  記事  >  アジア/香港の場合、LocalDate.parse および ResolverStyle.STRICT が予期しない結果を返す

アジア/香港の場合、LocalDate.parse および ResolverStyle.STRICT が予期しない結果を返す

王林
王林転載
2024-02-13 20:54:071146ブラウズ

php エディタ Xiaoxin は、この記事で Java の LocalDate.parse と ResolverStyle.STRICT に関する問題を紹介します。アジアまたは香港でこれらの方法を使用すると、予期しない結果が生じる可能性があります。この問題を調査し、解決策を提供します。

質問の内容

私の入力は 19.12.0009 で、期待値は dec 19 00:00:00 hkt 9 ですが、返された結果は dec 21 00:23:18 hkt 9、なぜ? コードは以下のように表示されます:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.uuuu")
                        .withResolverStyle(ResolverStyle.STRICT);
LocalDate localDate = LocalDate.parse("19.12.0009", formatter);
Instant instant = Instant.from(localDate.atStartOfDay(ZoneId.of("Asia/Hong_Kong")));
Date resultDate = Date.from(instant);
System.out.println("resultDate" + resultDate);

Solution

zonerules には遷移の概念があり、 Savinglocaltransitions があります。何らかの理由 (おそらく歴史的理由) で、"asia/hong_kong" ローカル変換での節約は 1904-10-30t00:36:42 から始まることがわかりました。 resolverstyle.strict ここでは問題ではありません。

これが、00:23:18 hkt 9 と表示される理由です。

コードを変更する場合、たとえば:

リーリー

期待される出力:

リーリー

以上がアジア/香港の場合、LocalDate.parse および ResolverStyle.STRICT が予期しない結果を返すの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。