Linux系统与Tomcat时区不一致的解决方法总结(全)

问题:通常情况下,我们会遇到linux系统时区与其上部署的tomcat时区不一致的问题。最常见的是系统时间为正常的CST中国标准时区(东八区),而tomcat日志时间却比系统时间慢了8个小时。

一、准备工作

在将解决问题之前,首先要确定系统当前时间是正确的。这里可以通过linux的date命令查看当前时间及时区。

1. 如果结果与本地时间或自己想要的效果一致 

   这种情况可以确定问题是出在tomcat上。可以通过步骤二中所列方法进行解决。

2. 如果结果与本地时间或自己想要的效果不一致

    这种情况需要先将系统校正为正确的时区。再通过步骤二的方法解决,具体操作如下:

 (1)修改时区,以我们使用的北京时间(东八区)为例

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

    上述命令将系统中存储的时区配置信息覆盖为本地时区配置。其中/usr/share/zoneinfo中存储了所有时区配置信息,可以根据需要为本地配置。值得注意的是北京时间的时区有多种表示方式

CST
Asia/Shanghai
GMT+08

(2)修改完时区后,再次使用date命令查看系统时间是否正确

     解决了系统时区不正确问题后,如果系统时间和tomcat日志时间仍然不一致,则是tomcat启动时读取时区配置造成的。具体解决方法如下

二、系统时区与Tomcat时区(JVM)不一致的解决方法

原因分析:tomcat服务器启动时,JVM获取时区信息出现问题。如,获取不到时区信息,会使用默认的UTC时区。

1.使用java代码设置默认时区

如果明确想要使用的时区,可以在应用程序初始化时,通过加载配置方式为整个项目设置默认时区。如在各种监听器初始化方法中为应用程序设置默认时区。代码如下:

final TimeZone zone = TimeZone.getTimeZone("Asia/Shanghai"); //获取中国时区
TimeZone.setDefault(zone); //设置时区

    缺点:每个应用程序都需要设置一次

2.设置tomcat的启动参数:时区参数

-Duser.timezone=Asia/Shanghai

   如果是Java SE程序,可以在eclipse启动程序时,通过右键Main方法 —> Run Configurations —> Arguments —> VM arguments 中添加上述参数

   但是,因为我们是web应用,程序是通过Tomcat服务器启动的,所以需要更改tomcat启动配置文件。操作如下:

   修改catalina.sh文件,该文件位于tomcat/bin下。在文件开头添加如下配置

export JAVA_OPTS="$JAVA_OPTS -Duser.timezone=Asia/Shanghai"

3.修改/etc/sysconfig/clock配置信息

linux中,JRE每次都从/etc/sysconfig/clock配置文件中获取时区信息,所以可以编辑/etc/sysconfig/clock配置文件添加时区信息,如果没有则新建

ZONE="Asia/Shanghai"   #时区
UTC=false      #设置为false,硬件时钟不与UTC时间一致
ARC=false      #仅用于alpha表明使用ARC。

4.将时区信息添加为环境变量TZ

# 编辑配置文件
vi /etc/profile
# 添加如下信息
export TZ="Asia/Shanghai"
# 使配置生效
source /etc/profile

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老鼠只爱大米

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值