我在部署应用到Ubantu系统上的tomcat服务器中运行,发现操作系统的时间和tomcat中的应用程序获取的时间不一致,总是相差8个小时,但是查看当前操作系统的时区也是CST时区(中国标准时区)。
查看系统的时区:
root@localhost:~# date +"%Z %z"
CST +0800
说明时区没有问题,是东八区时区,但是为什么tomcat启动的时候没有使用我设置好的时区呢?最后我通过java代码直接获取默认时区,发现输出的的是:Etc/UTC,怪不得时间差8小时,如下图:
获取系统默认时区
Java代码获取系统默认时区:
System.out.println(newDate());
System.out.println(System.getProperty("user.timezone"));
在启动java程序的时候添加上-Duser.timezone=Asia/Shanghai参数,时区变对了,其原因是java程序在启动的时候如果没有指定时区,默认会根据System.getProperty("user.timezone")去获取时区操作系统配置文件中配置的时区。
Ubantu操作系统时区配置文件是/etc/timezone,将文件中的内容修改成Asia/Shanghai,保证java程序在启动的时候初始化时区是东八区。
Centos6.X操作系统的时区配置文件是/etc/sysconfig/clock,将文件内容修改为ZONE="Asia/Shanghai",来修正时区为东八区,保证java程序在启动的时候初始化时区是东八区。
修改Linux系统时区,以Ubantu和centos6.x为例: