Rumah  >  Artikel  >  LocalDate.parse dan ResolverStyle.STRICT, untuk Asia/Hong Kong, mengembalikan hasil yang tidak dijangka

LocalDate.parse dan ResolverStyle.STRICT, untuk Asia/Hong Kong, mengembalikan hasil yang tidak dijangka

王林
王林ke hadapan
2024-02-13 20:54:071147semak imbas

editor php Xiaoxin akan memperkenalkan isu tentang LocalDate.parse dan ResolverStyle.STRICT dalam Java dalam artikel ini. Apabila menggunakan kaedah ini di Asia atau Hong Kong, anda mungkin mendapat hasil yang tidak dijangka. Kami akan meneroka isu ini dan memberikan penyelesaian.

Kandungan soalan

Input saya ialah 19.12.0009, nilai jangkaan ialah 19 dec 00:00:00 hkt 9, tetapi keputusan yang dikembalikan ialah 21 Disember 00:23:18 hkt 9, kenapa? Kodnya adalah seperti berikut:

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);

Penyelesaian

Dalam zonerules terdapat konsep penukaran dengan savingslocaltransitions。我发现由于某种原因(可能是历史原因), "asia/hong_kong" 本地转换中的节省从 1904-10-30t00:36:42 开始。 resolverstyle.strict di dalamnya yang bukan masalah di sini!

Sebab itu anda nampak 00:23:18 hkt 9.

Jika anda menukar kod, contohnya:

localdate localdate = localdate.parse("19.12.1904", formatter);

Output yang dijangkakan:

resultDate Mon Dec 19 01:00:00 JST 1904

Atas ialah kandungan terperinci LocalDate.parse dan ResolverStyle.STRICT, untuk Asia/Hong Kong, mengembalikan hasil yang tidak dijangka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam