为什么Java会比Casablanca的实时时间晚一小时?

问题描述 投票:2回答:1

虽然在Java Data / Time API上进行了一些实验。我想知道为什么此代码无法按预期运行:

ZonedDateTime CasaNow = ZonedDateTime.now(ZoneId.of("Africa/Casablanca"));
System.out.println(CasaNow);
// 2020-02-20T11:32:28.063419Z[Africa/Casablanca]

我原本希望它像时钟一样打印“ 2020-02-20T 12:32:28。063419Z [Africa / Casablanca]”。

这是Casablanca中的确切时间,但是程序会在该时间之后产生一个小时。我在做什么错?

更新

JDK信息:

java 11.0.1 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

操作系统的语言环境配置:

locale configuration of the operating system

java time timezone
1个回答
0
投票

据我了解,自从2018年以来,摩洛哥在斋月期间的UTC + 01:00偏移量为+00:00(通常写为Z)。因此,您是正确的:今天要在UTC(Z)出场是出乎意料的,因为斋月直到公历4月下旬才开始。

[根据BBC摩洛哥于2018年10月(即撰写本文的1年4个月前)决定在冬天也保留其以前的夏令时(DST)。因此,我的猜测是,您的Java安装中的时区数据库早于2018年10月,Stephen C在注释中是正确的。因此Java现在假定为标准时间,并且错误地为您提供了UTC时间。

© www.soinside.com 2019 - 2024. All rights reserved.