巴西的 ZonedDateTime 仍然得到 -2 而不是 -3 偏移量
Posted
技术标签:
【中文标题】巴西的 ZonedDateTime 仍然得到 -2 而不是 -3 偏移量【英文标题】:ZonedDateTime in Brazil still getting -2 instead of -3 offset 【发布时间】: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
【参考方案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)
以上是关于巴西的 ZonedDateTime 仍然得到 -2 而不是 -3 偏移量的主要内容,如果未能解决你的问题,请参考以下文章
Java 8:计算两个 ZonedDateTime 之间的差异
客户端发送的请求在语法上不正确 Java ZonedDateTime 后端
无法使用Java 8中的DateTimeFormatter和ZonedDateTime从TemporalAccessor获取ZonedDateTime
在时区将 ZonedDateTime 转换为 LocalDateTime