useDaylightTime()此方法在www.example.com中TimeZone.java返回错误答案

i5desfxk  于 2023-04-19  发布在  Java
关注(0)|答案(1)|浏览(90)

卡萨布兰卡是摩洛哥的一个城市,实际上摩洛哥使用DST,但方法useDaylight()返回false,另一方面,罗马也使用DST和useDaylight()返回true我的jdk是8u362,我的代码是这样的:

public static void main(String[] args) {
        TimeZone Rome = TimeZone.getTimeZone("Europe/Rome");
        System.out.println(Rome.useDaylightTime());

        TimeZone Casablanca = TimeZone.getTimeZone("Africa/Casablanca");
        System.out.println(Casablanca.useDaylightTime());

    }

结果就是

true
false

我查过卡萨布兰卡和罗马都用夏令时,为什么卡萨布兰卡的时区返回假
我尝试了一些其他城市的时区,发现一些时区使用DST但返回false,而其他城市是正常的,有人能告诉我为什么并解释方法useDaylight()的真实的含义吗?

tzdcorbm

tzdcorbm1#

看看TimeZone的源代码。
对应于Europe/RomeTimeZone定义如下(行539):

new SimpleTimeZone(1000 * 3600, "CET", Calendar.MARCH, -1, Calendar.SUNDAY, 2000 * 3600, Calendar.OCTOBER, -1, Calendar.SUNDAY, 3000 * 3600);

其中第4到第10个参数与夏令时有关,并导致useDaylightTime()返回true。
对应于Africa/Casablanca(行486)的TimeZone是:

new SimpleTimeZone(0 * 3600, "GMT")

并返回true
所以Java将欧洲/罗马定义为有日光节约,而非洲/卡萨布兰卡则没有日光节约。
下一个问题是:这是否反映了现实?
Java使用来自全球权威的时区“历史”定义,即Internet Corporation for Assigned Names and Numberschange to reflect reality with different versions
根据上面的页面Morocco gave up daylight saving in Oct 2018,此更改反映在以下版本11.0.2,8 u201和7 u211中。

相关问题