java获取tomcat启动时间不对_部署在Tomcat 服务器中的web应用读取时间与系统时间不一致问题...
我在部署应用到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为例:
修改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的时区是东八区时区
java获取tomcat启动时间不对_部署在Tomcat 服务器中的web应用读取时间与系统时间不一致问题...相关推荐
- java 获取系统时间不对_java new Date()得到的时间和系统时间不一样
造成这种问题的原因可能是:你的操作系统时区跟你JVM的时区不一致. 你的操作系统应该是中国的时区吧,而JVM的时区不一定是中国时区,你在应用服务器的Java虚拟机添加如下配置: -Dfile.enco ...
- linux 获取硬件时间,Linux的硬件时间及系统时间调用流程--转自网络
事实上在Linux中有两个时钟系统,分别是系统时间和硬件时间 UTC是协调世界时(Universal Time Coordinated)英文缩写,它比北京时间早8个小时. 二)date date可以打 ...
- java获取mysql的数据_【助教】Java获取数据库数据展示
本文将给出一个最简单的Java查询数据库中一张表的数据并将查询结果展示在页面的例子. 实际上,我们要解决以下两个问题: Java与数据库交互(以JDBC为例) 数据展示在前台页面(以Servlet+J ...
- java tomcat源码_详解Tomcat系列(一)-从源码分析Tomcat的启动
在整个Tomcat系列文章讲解之前, 我想说的是虽然整个Tomcat体系比较复杂, 但是Tomcat中的代码并不难读, 只要认真花点功夫, 一定能啃下来. 由于篇幅的原因, 很难把Tomcat所有的知 ...
- java获取vm运行参数_如何获取在Java中运行Java VM的版本?
java获取vm运行参数 To get the version of running VM (Virtual Machine) in Java, we use the getProperties() ...
- java 获取文件扩展名_如何在Java中获取文件扩展名
java 获取文件扩展名 Sometimes while working with files, we need to process them differently based on their ...
- java 获取所有及假日_电子商务网站所有者假日销售指南
java 获取所有及假日 If this is the first time you've thought seriously about holiday sales, you're already ...
- java获取vm运行参数_如何获取在Java中运行Java VM的名称?
java获取vm运行参数 To get the name of running VM (Virtual Machine) in Java, we use the getProperties() met ...
- springboot 获取登录浏览器_java项目部署到linux服务器,微信小程序后台springboot项目部署到云服务器(图文详解)...
前面给大家讲了一个点餐系统的开发,包括java点餐后台和微信点餐小程序.可是都是教大家如何在本地把项目跑起来.今天就来教大家如何把这个点餐系统部署到服务器,实现商用. 传送门 点餐系统的开发,java ...
最新文章
- Address already in use: JVM_Bind错误的解决
- SSH-KeyGen 的用法 【转载】
- 总结:详细讲解MapReduce过程(整理补充)
- 【Castell】安全联锁提升UPS设备维护管理水平
- 做好数据分析必备的 5 种典型可视化图表 | 技能卡片 No.1
- csv文件导入sqlite
- python文本提取_使用Python从HTML文件中提取文本
- python中print怎么用_python的print怎么用
- 一个实例带你搞懂Apriori关联分析算法
- 解说linux下proc文件系统
- Redis的内存回收机制和数据过期淘汰策略
- 不拥抱算法的张小龙,还能带着微信继续避免失败?
- Atitit. c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0 attilax总结 1. 版本历史	1 1.1. C# 1.0-纯粹的面向对象	2 1.2. C# 2.0
- 141178万人, pyechart制作第七次人口普查数据动态图
- adb连接Android设备使用screenrecord命令录屏和screencap命令截屏
- 【深入理解C++】析构函数
- pyqt5动态设置字体大小
- 计算机应用基础教程ppt 洪歧,计算机应用基础案例教程(清华)
- 《混乱的猴子》读书笔记 -- 关于硅谷、创业、Facebook和广告
- 娱乐工作两不误 在Linux下如何安装QQ?linuxqq