博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
部署在Tomcat 服务器中的web应用读取时间与系统时间不一致问题 【靠谱】
阅读量:7174 次
发布时间:2019-06-29

本文共 1954 字,大约阅读时间需要 6 分钟。

hot3.png

    我在部署应用到Ubantu系统上的tomcat服务器中运行,发现操作系统的时间和tomcat中的应用程序获取的时间不一致,总是相差8个小时,但是查看当前操作系统的时区也是CST时区(中国标准时区)。

查看系统的时区:

root:~# 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为例:

修改Ubantu系统时区

时区修改成功

执行:

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

修改/etc/default/rcS中的UTC=yes改为UTC=no (Centos.x不用做这个操作)

时间同步:ntpdate time.windows.com

硬件时间和系统时间校准:

sudo hwclock --systohc --localtime

 

时区修改成功,但是记得修改时区默认配置文件/etc/timezone中的内容为Asia/Shanghai(Centos6.x修改的是/etc/sysconfig/clock文件中的内容为ZONE="Asia/Shanghai")。

检查时间是否一致,右下图可知系统时间和硬件时间已经保持一致了:

检查时间是否一致

注:在配置时区的时候,注意一定要校准系统时间和硬件时间,让两个时间保持一致

      但是,有的时候通过以上步骤还是解决不了java程序时区问题,java程序读取时间还是不对,甚至System.getProperty("user.timezone")都读不到时区信息,只有System.out.println(java.util.TimeZone.getDefault().getID())可以读到,并且读到的是系统在修改时区的时区信息。主要原因是我们在安装JDK之后发现时间不对才去修改的系统时区,此时jdk已经默认使用系统修改之前的那个时区,已经改不回来了,删掉jdk重装也没用。

有两种方法解决这个问题:

1、使用-Duser.timezone=GMT+08来指定时区;

2、就是修改/etc/profile文件,在文件的末尾添加 export TZ='Asia/Shanghai',然后使用命令source /etc/profile使其生效即可。

 

总结:

java程序在初始化时区的时候,如果没有指定JVM参数-Duser.timezone=GMT+08,java程序就会默认读取操作系统的时区来初始化java程序的时区。

为了保证java程序在启动时加载正确的默认时区:

1、需要将系统的时区改正确

2、还需要将硬件时钟的系统时钟校准

3、修改配置文件中的时区参数

4、在/etc/profile文件末尾添加:export TZ='Asia/Shanghai

5、修改tomcat安装目录下的bin目录下的catalina.sh脚本,添加JVM参数JAVA_OPTS="${JAVA_OPTS} -Duser.timezone=GMT+08",来保证Tomcat的时区是东八区时区

作者:cooze
链接:https://www.jianshu.com/p/5b16cb016442
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

转载于:https://my.oschina.net/airship/blog/3040559

你可能感兴趣的文章
WinHEC上好玩的东西
查看>>
.NET Compact Framework 多线程环境下的UI异步刷新
查看>>
招聘:高级lamp的工程师、高级.net的软件工程师
查看>>
在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级
查看>>
AIO 简介
查看>>
如何查看oracle用户权限
查看>>
Android的init过程(二):初始化语言(init.rc)解析
查看>>
如何优雅地实现Python通用多线程/进程并行模块
查看>>
使用wiz(为知)发布网易博客实践
查看>>
完美仿MSN右下角弹出广告代码并可自动消失,附带关闭按钮
查看>>
Bucket不为空,请检查该Bucket是否包含未删除的Object或者未成功的Multipart碎片
查看>>
ASP.NET MVC+LINQ开发一个图书销售站点(6):创建数据层
查看>>
Spine Skeleton Animation(2D骨骼动画)
查看>>
Kafka~服务端几个常用的命令
查看>>
(第五天)数组
查看>>
软件工程 估计方法
查看>>
VS 20XX 使用技巧总结
查看>>
分享一下Java写的坦克大战游戏,相信很多人小时候玩过
查看>>
RSA密钥的跨平台通用
查看>>
ReactNative: 搭建ReactNative开发环境
查看>>