Linux系统时间不正确

关于Linux时区的设置,系统时间修改

注意

一般情况下,Linux系统安装的时候就会选择时区,所以时区一般是没问题的,只需要修改系统时间就行,也就是第二步的date -s命令

关于UTC和CST

UTC: Coordinated Universal Time,协调世界时,就是现在的世界标准时间

CST:China Standard Time,有很多种表示,表示China Standard Time时,就是北京时间,在时区划分上,属东八区,比协调世界时早8小时,记为UTC+8

时间不正确问题排查步骤

  1. 先使用date命令查看自己的时区,如果是CST那是正常的时区

    1
    2
    [root@localhost demo]# date
    2021年 12月 02日 星期四 20:34:28 CST

    设置时区,参考链接:https://www.cnblogs.com/zhangeamon/p/5500744.html

    步骤:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 查看当前系统时间状态
    timedatectl status
    # 将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间
    timedatectl set-local-rtc 1
    # 设置系统时区为上海
    timedatectl set-timezone Asia/Shanghai
    # 列出所有时区
    timedatectl list-timezones
    # 所有时区的定义文件都在/usr/share/zoneinfo下可以找到
    # 不推荐的修改时区的做法
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  2. 如果时区对,但是时间不对呢?需要手动设置系统时间

    查看CST确切时间:https://24timezones.com/shiqu/cst_china

    1
    2
    3
    4
    5
    [root@localhost demo]# date -s 2021/12/2
    [root@localhost demo]# date -s 20:33:00
    # 再通过date验证
    [root@localhost demo]# date
    2021年 12月 02日 星期四 20:35:57 CST
  3. 如果系统时间对了,但是通过Java代码new Date()出来的时间又不对了呢?

    参考:https://www.cnblogs.com/guixiaoming/p/6632238.html

    jvm是从/etc/sysconfig/clock来获取时区相关信息的,如果clock文件存在,则覆盖内容,如果不存在,则创建clock文件,写入以下内容:

    1
    2
    3
    ZONE="Asia/Shanghai"
    UTC=false
    ARC=false

    然后重启程序就好了

附:设置好时区的样子

1
2
3
4
5
6
7
8
9
[root@localhost ~]# timedatectl status
Local time: 四 2021-12-02 21:02:23 CST
Universal time: 四 2021-12-02 13:02:23 UTC
RTC time: 四 2021-12-02 13:02:23
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a