LocalDateTime ZoneId 北京时间转巴西时间与实际相差1小时-已解决

发布时间 2023-12-13 16:22:33作者: 豆豆2018

巴西圣保罗标准时间 UTC -3
北京时间 UTC + 8 

两者相差11小时,即北京时间比巴西快11小时,例如:北京时间15:00:00,  巴西应该为 04:00:00

但是!!,本地验证巴西时间05:00:00,那么少了一个小时去哪里了呢?

捣鼓了很多配置,无效,同事代码跑的就是04:00:00,相同的代码不同的结果,为何呢?

环境问题:系统时间时区 or idea配置  or jdk版本??

最后定位了是jdk版本问题,请检查本地版本是否为1.8,我将他升级至17版本,结果是ok的。

上代码

        LocalDateTime now = LocalDateTime.now();
        System.out.println("当前时间: " + now);
        LocalDateTime localDateTime = now.atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneId.of("America/Sao_Paulo")).toLocalDateTime();
        System.out.println("当前巴西圣保罗时间: " + localDateTime);

  

如果你的版本1.8,那么建议你换几个高版本的1.8,多试一下,也许你当前版本jdk考虑了你的夏令时计算逻辑. 

 

 

如何切换项目jdk版本:参考

https://blog.csdn.net/m0_55051386/article/details/134078424