这篇文章主要介绍了JVM默认时区为:Asia/Shanghai与java程序中GMT+08不一致异常问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
在Spring程序中配置了spring.jackson.time-zone=GMT+08时,部分时间相差一个小时问题,且是固定的时间出现了固定的时差问题。
经过排查,发现是JVM的默认时区为
Asia/Shanghai,两者不一致,然后Asia/Shanghai 这个时区并不一定与GMT+08这个时区相等,他们是2种定义标准。
Asia/Shanghai 这个代表的是中国的时区,但在历史中,有国家(包含中国)政策颁布了在1986-1991年等还存在夏令时。
在这样的时间区间,夏季时,会将时间拨快1个小时(即东9区时间),夏季结束时会再次将时间拨回一个小时(即东8区时间)。
所以要保证程序显示的时间没有问题,需要将JVM和spring.jackson.time-zone设置的时区保持一致即可解决问题。
JVM中设置为
Asia/Shanghai,经代码调试出现的底层时区调整的测试案例。
下面为运行结果:清晰的看到Asia/Shanghai 时区的调整时间点与调整量。
transitions[] 中的值来源于DEBUG程序时复制jvm中的数据。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程学习网。