时区java项目new date()时间和服务器时间(数据库)不一致

Posted rookiejava

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时区java项目new date()时间和服务器时间(数据库)不一致相关的知识,希望对你有一定的参考价值。

造成这种问题的原因可能是:你的操作系统时区跟你JVM的时区不一致。 

你的操作系统应该是中国的时区吧,而JVM的时区不一定是中国时区,你在应用服务器的Java虚拟机添加如下配置:  -Dfile.encoding=UTF8     -Duser.timezone=GMT+08
 

在一个精简的Linux安装上jre,发现所有的java程序获取的时间都不是系统时间。后来发现原来是时区不对。java程序获取的时间都是GMT时间,而系统是北京时间,应该是GMT+8,刚好相差8小时。网上搜了好多资料,只有两种方法:

1、在程序中使用java的函数设定时区。

2、在启动java程序时加参数-Duser.timezone=GMT+8

不过总不能去修改每个程序的源码去设定时区吧。也不想在每个java程序启动的时候加参数,太麻烦了。就没有一劳永逸的办法了?

开始以为jre应该会有某个配置文件保存了时区的配置,结果一无所获。不过总有jre总要去系统中获取时区配置吧。于是开始想是不是java用的是 linux中的系统配置文件?于是到linux系统下/etc/sysconfig目录看时区配置。发现缺少了clock这个用于设置时区的文件。把别的 linux系统中的这个文件拷过来一试,ok。java程序的时间和系统时间一致了。看来jre是从/etc/sysconfig/clock这个文件中 获取时区信息的。

附clock文件内容:

ZONE="Asia/Shanghai"
UTC=false
ARC=false

ZONE -- 时区
UTC  -- 表明时钟设置为UTC。 
ARC  -- 仅用于alpha表明使用ARC。

以上转载自:https://www.cnblogs.com/konghou/p/4118770.html

按照上面的步骤更改后仍然没有解决问题

 查询服务器时间

1、date

2、hwclock

3、hwclock --localtime

hwclock --localtime  硬件时钟真正的时间,经测试项目实际使用的时间。

 

修改hwclock --localtime

一、使用命令与互联网时间同步,然后再写入硬件(也就是CMOS)
ntp服务器同步时间
代码:
sudo ntpdate cn.pool.ntp.org
将调整后的时间写入cmos
代码:
sudo hwclock --systohc
二、这一种方法与第一种有异曲同工的效果,只是不用与ntp服务器同步
设置系统当前时间
#date -s ‘2008-6-8 09:19:00‘
#date -s ‘09:19:00‘
#date -s ‘09:19‘
写入硬件
#hwclock -w --localtime

以上是关于时区java项目new date()时间和服务器时间(数据库)不一致的主要内容,如果未能解决你的问题,请参考以下文章

怎么实时同步java虚拟机与操作系统时区 及JVM启动后再更改操作系统时区或时间也能保持其同步? new date() 时差8个小时的解决方案

java new Date()得到的时间和系统时间不一样

new java.util.Date() 得到的时间与系统时间不一样,为啥?

在node里new Date()时比北京时间少八小时, 知道是因为时区的问题,在不改变时区的情况下怎么解决呢??

如何让 JavaScript 的 New Date() 函数在不同时区显示相同? [复制]

转帖linux date 显示指定时区的时间 借助TZ 环境变量 export TZ=Asia/Shanghai 或 America/New_York