java 时区问题

问题现象:java程序获得的时间比系统date命令输出的时间要快一个小时

复现:编写一个CurrentTime.java 文件输出时间、时区等信息

编译并运行

vim 遇到 Swap file ".CurrentTime.java.swp" already exists! 退出将此文件删掉再编辑,这可能是上次意外退出,网络卡住然后终端强制退出的情况下很常见。

修改系统时区:

设置时区为 Asia/Ulaanbaatar,问题复现:

java获得当前时间12:23,而date输出11:23

解决办法1:将Asia/Ulaanbaatar改成Asia/Shanghai

但问题是为什么java对应就 +9 呢?而系统date +8 呢?

可能是java时区数据库未更新到最高版本,可以用这个方法检查是否开启了夏令时: