首先要知道有Linux服务器有2种时钟类型

1.硬件时钟(RTC time)

可以通过hwcolock或clock命令操作硬件时钟

    通过date修改时间,当系统下次重启时,系统时钟还会从硬件时钟去取,
    date设置的时间就无效了,所以需要hwclock设置时间

2.系统时钟

查看系统时钟:date

如果使用date -s "yyyy-MM-dd HH:mm:ss"
    手动修改时间不生效,
    可能是互联网同步时间功能处于开启状态,
    可以使用命令:timedatectl set-ntp 0关掉,
    再次开启互联网时间同步功能执行开启命令:timedatectl set-ntp 1

timedatectl命令可以查看时区和时间

  • Local time:地方时间,
  • Universal time:世界时间,
  • RTC time:硬件时钟,
  • Time zone:时区,
  • NTP enabled: yes:yes是指NTP已经启用,当其值为no时说明NTP未启用,
  • NTP synchronized:yes:yes是指完成过NTP同步,no说明未完成过NTP同步,

3.硬件时钟与系统时钟间的同步

从硬件时钟同步时间至系统时钟

[root@hadoopmaster ~]# hwclock --hctosys

或者

[root@hadoopmaster ~]# clock --hctosys

从系统时钟同步时间至硬件时钟

[root@hadoopmaster ~]# hwclock --systohc

或者

[root@hadoopmaster ~]# clock --systohc

更改时区有两种方式,一种是使用timedatectl命令(如果系统中有该命令的话),另一种是为时区文件创建符合链接。

方式一:使用timedatactl命令
确定完要修改的时区后,可以使用如下命令进行修改,下面的命令将时区改为America/New_York时区

[root@hadoopmaster ~]# timedatectl set-timezone America/New_York
 You have mail in /var/spool/mail/root

改完后可以查看验证一下是否更改成功,

[root@hadoopmaster ~]# timedatectl
Local time: Sun 2022-04-17 05:10:49 EDT
Universal time: Sun 2022-04-17 09:10:49 UTC
RTC time: Sun 2022-04-17 09:10:49
Time zone: America/New_York (EDT, -0400)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at Sun 2022-03-13 01:59:59 EST Sun 2022-03-13 03:00:00 EDT
Next DST change: DST ends (the clock jumps one hour backwards) at Sun 2022-11-06 01:59:59 EDT Sun 2022-11-06 01:00:00 EST

显然已经更改成功。

方式二:通过创建符号链接来更改时区
在没有timedatectl命令的系统中,可以通过将/usr/share/zoneinfo下的不同时区文件链接到/etc/localtime的方式来更改时区,一般而言系统中已经有时区文件链接到/etc/localtime,我们可以将该文件先备份:cp /etc/localtime /etc/localtime.20220417bak01,然后为新的时区文件创建符号链接

ln -s /usr/share/zoneinfo/America/New_York /etc/localtime

踩坑记录:把系统时间时区设置为0时区

方法1:在/etc/profile加一行

export TZ=“UTC-08:00”
source /etc/profile 使配置生效
date查看时间,发现时间变成了0时区时间,但是机器上的jenkins执行的python脚本时间却是本地时间(东八区)

方法2:timedatectl查看时区

发现本地时间却是还是东八区时间
执行:timedatectl set-timezone UTC
本地时间变为0时区时间