gpt4 book ai didi

java - 为什么 Java 产生的时间比卡萨布兰卡实时时间晚一小时?

转载 作者:行者123 更新时间:2023-12-02 07:48:57 26 4
gpt4 key购买 nike

在 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-20T12:32:28.063419Z[非洲/卡萨布兰卡]”。

这是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

最佳答案

据我了解,自 2018 年以来,摩洛哥使用 UTC+01:00,但斋月期间的偏移量为 +00:00(通常写为 Z)。所以您是对的:今天获得 UTC (Z) 时间是意外的,因为斋月要到公历四月下旬才开始。

据 BBC 摩洛哥报道,2018 年 10 月(截至撰写本文时 1 年前 4 个月)决定在冬季也保留之前的夏令时 (DST)。所以我的猜测是,Stephen C 在评论中是正确的,您的 Java 安装中的时区数据库早于 2018 年 10 月。因此,Java 现在假定标准时间,并错误地为您提供 UTC 时间。

无论如何,我刚刚获得了 Java 8 上的 2020-02-20T19:08:47.375Z[Africa/Cas​​ablanca]2020-02-20T20:06:43.174686 +01:00[Africa/Cas​​ablanca] 关于 Java 11。看来我的 Java 8 是 2018 年 10 月之前的版本,而我的 Java 11 是较新的版本。据我记得,在我安装它们之后,它们都没有更新其时区数据库。

时区更新工具

由于您使用的是 Oracle Java,解决方案是使用时区更新工具更新 Java 的时区数据库。请参阅底部的链接并按照其中给出的说明进行操作。不过,Stack Overflow 上有几个关于该工具失败的问题,所以我希望您能够解决。最后的手段是安装全新的 Java 运行时环境。

链接

关于java - 为什么 Java 产生的时间比卡萨布兰卡实时时间晚一小时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60319119/

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