首页 > 解决方案 > 巴西的 ZonedDateTime 仍然得到 -2 而不是 -3 偏移量

问题描述

我正在使用 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 周了,直到现在一切都在正常工作。这是一个非常模糊的问题,但我无法想象我可能做了什么让时区出错。谁能帮我理解发生了什么?

标签: javadatetimezonedstzoneddatetime

解决方案


根据此页面:https ://www.oracle.com/technetwork/java/javase/tzdata-versions-138805.html

巴西不再遵守夏令时,因为:

  • 13.0.1
  • 11.0.5
  • 8u231
  • 7u241

而您的 Java 版本1.8.0_221不包含该更改。


推荐阅读