Java获取时间与Linux不一致

Java获取时间与Linux不一致

版权
问题描述

    遇到一个问题,web显示的时间比服务器时间快12小时。Tomcat和MySQL安装在同一台服务器,系统是centos7,且服务器时间和MySQL时间一致,均是当前北京时间。

解决思路

1、首先查看后端传给前端的时间戳;

    发现后端传过去的时间已经快了12小时,说明web显示异常是后端问题;

2、打印业务的日志,发现date显示的时间正常,但是date.getTime()对应的时间戳不正常:

 logger.info("date = {}.",date);
 logger.info("date = {}.",date.getTime());

 

    date.getTime()对应的时间比date快12小时,应该是Java的Date.getTime()获取的时间有问题;

3、打印jvm的时区

final Properties p = System.getProperties();
 final Enumeration e = p.keys();
 while (e.hasMoreElements())
 {
  final String prt = (String) e.nextElement();
  final String prtvalue = System.getProperty(prt);
  System.out.println(prt + ":" + prtvalue);
 }

 

查看打印出的控制台的内容:

......
catalina.useNaming:true
user.timezone:America/New_York  ----》说明时区有问题
java.awt.printerjob:sun.print.PSPrinterJob
......

4、网上查资料,Linux jvm 是读取 /etc/sysconfig/clock 文件来确定时区, 如果没有可以添加一个。 打开后发现没有clock文件,手动创建一个,内容如下:

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

 

    ZONE – 时区

    UTC – 表明时钟设置为UTC

    ARC – 仅用于alpha表明使用ARC

重启Tomcat,发现没生效。
5、继续排查,发现系统date命令和hwclock --show命令时间不一致,需要时钟与网络时间一致。
(date是系统时钟,hwclock是硬件时钟,系统时钟和硬件时钟可以查看这篇文章:linux hwclock命令参数及用法详解–linux显示/设置硬件时钟命令)

5.1、安装ntpdate工具

    sudo yum -y install ntp ntpdate1

5.2、设置系统时间与网络时间同步

    sudo ntpdate cn.pool.ntp.org1

5.3、将系统时间写入硬件时间

    sudo hwclock --systohc1

5.4、查看系统时间

    timedatectl

得到

    [root@localhost fw-basic-service]# timedatectl status
    Local time: Thu 2019-04-04 10:19:20 CST
    Universal time: Thu 2019-04-04 02:19:20 UTC
    RTC time: Thu 2019-04-04 02:19:44
    Time zone: Asia/Shanghai (CST, +0800)
    NTP enabled: n/a NTP synchronized: no RTC in local TZ: no
    DST active: n/a

此时重启Tomcat,时间变正常了。
————————————————
版权声明:本文为CSDN博主「安全防护技术」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/songfeihu0810232/article/details/89061441

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值