【问题标题】:ZonedDateTime in Brazil still getting -2 instead of -3 offset巴西的 ZonedDateTime 仍然得到 -2 而不是 -3 偏移量
【发布时间】: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


【解决方案1】:

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

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

  • 13.0.1
  • 11.0.5
  • 8u231
  • 7u241

虽然您的 Java 版本是 1.8.0_221,但不包括该更改。

【讨论】:

  • 但是 JAVA_HOME 指向的是 C:\Program Files\Java\jdk1.8.0_241
  • 你如何运行你的应用程序?
  • 使用 Maven。 mvn spring-boot:run
  • 试试java -version
  • java 版本 "1.8.0_241" Java(TM) SE Runtime Environment (build 1.8.0_241-b07) Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)
猜你喜欢
  • 2021-07-26
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 2023-01-13
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多