linux下如何解决jvm执行取得的时间和系统时间不一致的问题

在查看日志的发现,打印出来的日志时间与当前linux的时间不一致,用new Date()打印出来的时间了发现是EST时间,而Linux机器的时间是CST时间(中国标准时间),所以是JVM与linux的时间不一致导致的。

解决方法有三种:

  • 在代码中增加时区

  • java执行时增加参数-Duser.timezone=GMT+8

  • 调整系统的时区

    1. 修改/etc/sysconfig/clock文件
    vim /etc/sysconfig/clock   #编辑时间配置文件
    ZONE="Asia/Shanghai"
    UTC=false                   #设置为false,硬件时钟不于utc时间一致
    ARC=false    
    
    1
    2
    3
    4
    1. 设置etc/localhost
    unlink /etc/localtime 
    ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  #linux的时区设置为上海时区
    
    1
    2
    1. ntpdate cn.pool.ntp.org #对准时间
    2. /sbin/hwclock --systohc #设置硬件时间和系统时间一致并校准
    3. 设置完成后,重新启动java

提示

实际上我在linux上执行date命令的时候发现已经是东八区的时间了,此时其实只要执行第三种方法中的第二步即可,就是初始化/etc/localtime ,然后将东八区的绑定上。

上次更新: 3 个月前