ZonedDateTime和Calendar在2050年的小时上不一致。为什么?

考虑以下代码:

    ZoneId zoneId = ZoneId.of("America/Los_Angeles");
    long currMillis = 2530778400000L;
    Instant curr = Instant.ofEpochMilli(currMillis);
    LocalDateTime dt = LocalDateTime.ofInstant(curr, zoneId); //the local one just for completeness
    ZonedDateTime zdt = ZonedDateTime.ofInstant(curr, zoneId);
    Calendar calendar = GregorianCalendar.from(zdt);

    System.out.println(String.format("%-30s %s", "java-8 LocalDateTime hour:", dt.toLocalTime().getHour()));
    System.out.println(String.format("%-30s %s", "java-8 ZonedDateTime hour:", zdt.toLocalTime().getHour()));
    System.out.println(String.format("%-30s %s", "Calendar hour:", calendar.get(Calendar.HOUR_OF_DAY)));

打印:

java-8 LocalDateTime hour:     3
java-8 ZonedDateTime hour:     3
Calendar hour:                 2

日历似乎在这个小时左右从第2小时跳到了第4小时(如果与DST更改相对应,通常不一定是问题)。

为什么日历报告的时间与ZonedDateTime不同? 这是已知问题吗? 在这种情况下,我应该更信任谁-ZonedDateTime或Calendar?

评论