您的位置:首页 > 运维架构 > Linux

linux下为java设置正确的时区

2016-08-18 20:13 162 查看
       公司新装的测试环境,发现报表上显示的时间比正常时间差了8个小时,检查了一下系统时间,发现设置完全正确,这就很奇怪了;

       后来想到因为系统中使用的时间类型是timestamp类型,所以会有时区的问题,当时区设置有问题的时候就会发生查看当前时间设置正确,但是时间怎么也对不上的情况;

       于是到网上查询如何设置时区,走了一些弯路,在此总结一下:

方法一

在 tomcat的jvm 运行参数加上 -Duser.timezone=GMT+8 ;

设置好后,就会忽略系统设置的时区,这种方法虽然简单直接,但是却不是一种好的方式,要从根源上解决问题!

方法二

映射时区文件/etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

cp /usr/share/zoneinfo/Asia/Shanghai/etc/localtime

java获取时区读取的就是/etc/localtime这个文件(准确的说应该是hotspot jvm,openjdk不起作用,要用方法一);

删了/etc/localtime,java时区就变成了GMT,软链接到指定时区后,java时区就是localtime指定的时区;

以下方法个人亲测针对hotspot jvm不管用(也许针对openjdk 虚拟机起作用);有没有/etc/sysconfig/clock这个文件,不会对jvm有任何影响,但是应该会对计算机关闭启动的时间有影响;

在TOMCAT的JAVA运行参数添加 -Duser.timezone=Asia/Shanghai或者,如果有启动的定时器或首次执行的代码,可以使用语句
System.setProperty("user.timezone","Asia/Shanghai");来设置
但是为解决时区问题,这样编码实在太烦,所以你要知道如何从根本上解决问题:
LINUX下:jre是从/etc/sysconfig/clock这个文件中获取时区信息的,修改次文件即可,没有的话添加一个。
附clock文件内容:
ZONE="Asia/Shanghai"
UTC=false
ARC=false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: