Maison  >  Article  >  LocalDate.parse et ResolverStyle.STRICT, pour l'Asie/Hong Kong, renvoient des résultats inattendus

LocalDate.parse et ResolverStyle.STRICT, pour l'Asie/Hong Kong, renvoient des résultats inattendus

王林
王林avant
2024-02-13 20:54:071147parcourir

L'éditeur php Xiaoxin présentera les problèmes liés à LocalDate.parse et ResolverStyle.STRICT en Java dans cet article. Lorsque vous utilisez ces méthodes en Asie ou à Hong Kong, vous risquez d’obtenir des résultats inattendus. Nous explorerons ce problème et proposerons des solutions.

Contenu de la question

Mon entrée est le 19.12.0009, la valeur attendue est le 19 décembre 00:00:00 hkt 9, mais le résultat renvoyé est le 21 décembre 00:23:18 hkt 9, pourquoi ? Le code est le suivant :

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

Dans zonerules il y a un concept de conversion avec savingslocaltransitions。我发现由于某种原因(可能是历史原因), "asia/hong_kong" 本地转换中的节省从 1904-10-30t00:36:42 开始。 resolverstyle.strict dedans ce qui n'est pas le problème ici !

C'est pour ça que tu vois 00:23:18 hkt 9.

Si vous modifiez le code, par exemple :

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

Résultat attendu :

resultDate Mon Dec 19 01:00:00 JST 1904

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer