卡萨布兰卡是摩洛哥的一个城市,实际上摩洛哥使用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()的真实的含义吗?
1条答案
按热度按时间tzdcorbm1#
看看TimeZone的源代码。
对应于
Europe/Rome
的TimeZone
定义如下(行539):其中第4到第10个参数与夏令时有关,并导致
useDaylightTime()
返回true。对应于
Africa/Casablanca
(行486)的TimeZone
是:并返回true
所以Java将欧洲/罗马定义为有日光节约,而非洲/卡萨布兰卡则没有日光节约。
下一个问题是:这是否反映了现实?
Java使用来自全球权威的时区“历史”定义,即Internet Corporation for Assigned Names and Numbers和change to reflect reality with different versions。
根据上面的页面Morocco gave up daylight saving in Oct 2018,此更改反映在以下版本11.0.2,8 u201和7 u211中。