虽然在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)
操作系统的语言环境配置:
据我了解,自从2018年以来,摩洛哥在斋月期间的UTC + 01:00偏移量为+00:00(通常写为Z
)。因此,您是正确的:今天要在UTC(Z
)出场是出乎意料的,因为斋月直到公历4月下旬才开始。
[根据BBC摩洛哥于2018年10月(即撰写本文的1年4个月前)决定在冬天也保留其以前的夏令时(DST)。因此,我的猜测是,您的Java安装中的时区数据库早于2018年10月,Stephen C在注释中是正确的。因此Java现在假定为标准时间,并且错误地为您提供了UTC时间。