【发布时间】:2020-06-05 06:33:19
【问题描述】:
我正在开发一个使用 Java 8、Maven 和 Spring 的应用程序。自 2019 年起,巴西取消了夏令时。
基本上,我将系统中的所有日期更改为以 utc 格式保存,并以使用该应用程序的人的时区显示。大多数用户来自巴西
为了解决时区问题,我将 JRE 和 JDK 更新到了最新版本的 java 8,因此所有显示为夏令时的日期开始恢复正常时间。 这样我就可以转换日期了,我已经这样做了大约两个星期了
问题是,今天午餐时间前后,我所做的所有转换都突然返回显示夏令时,即使根本没有更新任何内容
例子:
calculatedList.forEach(dto -> {
LocalDateTime date = dto.getResultDate();
dto.setResultDate(date.atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.of("America/Sao_Paulo")).toLocalDateTime());
});
当我编写此代码时,我确保转换采用 utc 日期并将其带到 -3。现在同样的方法正在转换为 -2
我已经编写这样的代码 2 周了,到目前为止一切正常。这是一个非常模糊的问题,但我无法想象我可能做了什么让时区出错。谁能帮我理解发生了什么?
【问题讨论】:
-
您使用的是哪个 JRE8 更新?
-
我在Java的控制面板更新。
-
尝试在你的代码中添加
System.out.println(System.getProperty("java.version"));,看看输出是什么。 -
输出为 1.8.0_221。问题肯定就在这里!但我的变量都指向版本 1.8.0_241
标签: java date timezone dst zoneddatetime