一、废哔哔
声明下,我是个java程序员。昨天找运维要来台服务器部署服务,然后在这台服务器上使用 date 命令,可以确定是东八区,然后查看时区,也确定是东八区上海时间。但是log4f的时间是和系统的时间不对应。然后在程序里输出了new Date(),显示的时间和log4j一致,但是和系统时间不一致,这就导致订单时间不对应,对比时间的时会出现误差,许多订单显示超时,实际没有超时。
当时排查过问题,可以很明确的排除时区,jvm,tomcat的问题,当时一位老同志就让我看看是否是系统时间和硬件时间不一致,一查看还真是,log4j和new Date()取得是硬件时间
二、解决过程
要是用root哦
- 查看系统时间
[root@localhost ~]# date
Tue Jun 13 10:20:13 CST 2017
- 查看硬件时间
[root@localhost ~]# hwclock --show
Tue 13 Jun 2017 02:11:12 AM CST -0.848845 seconds
可以看出系统时间比硬件时间快,系统时间是准确的
假如系统时间和硬件时间都不准确
- 更新系统年月日
[root@localhost ~]# timedatectl set-time 2017-06-13
- 更新系统时分秒
[root@localhost ~]# timedatectl set-time 10:25:17
- 更新时区(亚洲-中国-上海)
[root@localhost ~]# timedatectl set-timezone Asia/Shanghai
- 将硬件时钟调整为与系统时钟一致
[root@localhost ~]# timedatectl set-local-rtc 1
或者
[root@localhost ~]# hwclock --systohc --localtime
- 将日期写入CMOS
[root@localhost ~]# clock –w
再次查看系统时间和硬件时间,他们就一致了