java - 巴西的 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 周了,直到现在一切都在正常工作。这是一个非常模糊的问题,但我无法想象我可能做了什么让时区出错。谁能帮我理解发生了什么?
解决方案
根据此页面:https ://www.oracle.com/technetwork/java/javase/tzdata-versions-138805.html
巴西不再遵守夏令时,因为:
- 13.0.1
- 11.0.5
- 8u231
- 7u241
而您的 Java 版本1.8.0_221
不包含该更改。
推荐阅读
- bazel - 如何验证 BAZEL 项目的正确性?
- image - 标签 xamarin 表单内的图像
- css - 当面板缩小时,mat-panel-description 不适合
- reactjs - 如何突破 Next/React 导入地狱?
- data-structures - 如何知道哪个函数的复杂度为 log n
- windows - 将打印机添加到 HKEY_Current_User
- amazon-web-services - “无效操作:无权获取角色凭据”尝试将 json 从 S3 加载到 Redshift
- ruby - Sassc 安装问题 - 耗时太长/崩溃/超时
- c++ - C++ ifstream 只读取最后一行
- javascript - Chrome94&95 画布错误