1.查看java的默认时区
java -XshowSettings:local
注意观察上面的 user.timezone = ,这种情况会选择默认的系统时区来自行计算Java生成的时间。
这里再扩展一些知识点:
window系统的时间就是硬件时间。
mac系统和linux系统的系统时间是将硬件时间根据时区转换为时区时间,再根据/etc/localtime转化为最终展示时间。时区的配置是/etc/timezone,显示格式的配置是/etc/localtime
Linux 修改本机时间
旧版本(如CentOS6)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
新版本(如CentOS7)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
原因:
原本的时区文件变成了链接文件,直接使用cp就相当于把原时区文件内容给覆盖掉,而且文件名不变!
例如,原本的 /etc/localtime 是链接到 /usr/share/zoneinfo/America/New_York 的,使用cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime之后原本New_York 的内容就变成了 Shanghai 的内容,文件名不变.
注意:
调整了时间格式,本机所属的时区仍保持不变.
Linux 修改本机时区
在linux中,有一些程序会自己计算时间,不会直接采用带有时区的本机时间格式,会根据UTC时间和本机所属的时区等计算出当前的时间。
比如jdk应用,时区为“Etc/UTC”,本机时间改为北京时间,通过java代码中new 出来的时间还是utc时间,所以必须得修正本机的时区。
echo 'Asia/Shanghai' >/etc/timezone
2.修改服务器的显示时间
a.先查看服务器当前时间
date
b.如果不是北京时间,做以下操作
1.先查看
ll /etc/localtime
2.建立软连接
ln -s /etc/localtime /usr/share/zoneinfo/Asia/shanghai
3.再次查看是否成功建立软连接
ll /etc/localtime
4.测试
date
3.也可以在运行jar包的时候配置时区
java -jar -Duser.timezone=UTC+08 xxx.jar