gpt4 book ai didi

PST 时区的 Java 日历错误时间?

转载 作者:行者123 更新时间:2023-11-29 03:04:51 29 4
gpt4 key购买 nike

玩弄 CalendarTimeZone 我遇到了以下奇怪的行为。

Calendar pstCal = Calendar.getInstance(TimeZone.getTimeZone("PST"));
System.out.println("H: "+ pstCal.get(Calendar.HOUR));

在撰写本文时,PST 时间根据 http://www.timeanddate.com/time/zones/pst现在是凌晨 1:39。然而,上面显示的代码会产生输出“H: 2

为什么是 2 而不是 1?仔细查看 Calendar 实例可以解释数字 2:dstSavings=3600000,useDaylight=true

但据我所知,PST 代表太平洋标准时间,即没有夏令时的时间。

为什么 Java 以这种方式处理 PST这是正确的还是 BUG?顺便说一句,这个问题不存在于 EST - 这里它对应于 http://www.timeanddate.com/time/zones/est .

我在 Oracle JDK 1.8.0_60 和 OpenJDK 1.8.0_60 上也看到了这种情况。

最佳答案

来自 the javadoc :

Three-letter time zone IDs

For compatibility with JDK 1.1.x, some other three-letter time zone IDs (such as "PST", "CTT", "AST") are also supported. However, their use is deprecated because the same abbreviation is often used for multiple time zones (for example, "CST" could be U.S. "Central Standard Time" and "China Standard Time"), and the Java platform can then only recognize one of them.

具体来说,Java 过去可能已经决定“PST”等同于“America/Los_Angeles”,这意味着夏令时在 PST 和 PDT 之间交替。无论出于何种原因,他们可能对“EST”做出了不同的决定。

作为时区标识符,缩写是不好的。您仍会发现它们在显示 值中常用,包括 timeanddate.com 上的缩写.但这并不意味着它们被 Java 以相同的方式解释。

如果您真的想了解为什么“EST”和“PST”在被 Java 解释为时区 ID 时在夏令时方面受到不同对待,请考虑“EST”、“MST”和“HST” "are still in the tzdb source data作为 POSIX 向后兼容原因的固定偏移时区。 “PST”和“CST”不再列在 tzdb 中,因此 Java 通过一些其他硬编码映射来解释它们,以便它们自己与 Java 1.1 向后兼容。

关于PST 时区的 Java 日历错误时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32627139/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com