image-20230209215401156

9 设置日期和时间

本节介绍如何通过timedatectl、date、hwclock命令来设置系统的日期、时间和时区等。

9.1 使用timedatectl命令设置

9.1.1 显示日期和时间

显示当前的日期和时间,命令如下:

# timedatectl

例如显示系统当前的日期和时间,命令和输出如下:

[root@superman-21 ~]# timedatectl
               Local time: 一 2022-12-05 21:56:07 CST
           Universal time: 一 2022-12-05 13:56:07 UTC
                 RTC time: 一 2022-12-05 13:56:07
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
[root@superman-21 ~]# 

9.1.2 通过远程服务器进行时间同步

您可以启用NTP远程服务器进行系统时钟的自动同步。是否启用NTP,可在root权限下执行如下命令进行设置。其中 boolean 可取值yes和no,分别表示启用和不启用NTP进行系统时钟自动同步,请根据实际情况修改。

img 说明: 若启用了NTP远程服务器进行系统时钟自动同步,则不能手动修改日期和时间。若需要手动修改日期或时间,则需确保已经关闭NTP系统时钟自动同步。可执行timedatectl set-ntp no命令进行关闭。

# timedatectl set-ntp boolean

例如停止自动远程时间同步,命令如下:

[root@superman-21 ~]# timedatectl set-ntp no
[root@superman-21 ~]# 
[root@superman-21 ~]# timedatectl
               Local time: 一 2022-12-05 22:00:57 CST
           Universal time: 一 2022-12-05 14:00:57 UTC
                 RTC time: 一 2022-12-05 14:00:57
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: inactive
          RTC in local TZ: no
[root@superman-21 ~]# 

9.1.3 修改日期

img 说明: 修改日期前,请确保已经关闭NTP系统时钟自动同步。

修改当前的日期,在root权限下执行如下命令,其中 YYYY 代表年份,MM 代表月份,DD 代表某天,请根据实际情况修改:

# timedatectl set-time YYYY-MM-DD

例如修改当前的日期为2022年12月05号,命令如下:

[root@superman-21 ~]# timedatectl set-time '2022-12-05'
[root@superman-21 ~]#
[root@superman-21 ~]# timedatectl
               Local time: 一 2022-12-05 00:00:07 CST
           Universal time: 日 2022-12-04 16:00:07 UTC
                 RTC time: 日 2022-12-04 16:00:08
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no
[root@superman-21 ~]# 

9.1.4 修改时间

img 说明: 修改时间前,请确保已经关闭NTP系统时钟自动同步。

修改当前的时间,在root权限下执行如下命令,其中 HH 代表小时,MM 代表分钟,SS 代表秒,请根据实际情况修改:

# timedatectl set-time HH:MM:SS

例如修改当前的时间为22点04分50秒,命令如下:

[root@superman-21 ~]# timedatectl set-time 22:04:40
[root@superman-21 ~]# timedatectl
               Local time: 一 2022-12-05 22:04:45 CST
           Universal time: 一 2022-12-05 14:04:45 UTC
                 RTC time: 一 2022-12-05 14:04:46
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no
[root@superman-21 ~]# 

9.1.5 修改时区

显示当前可用时区,命令如下:

# timedatectl list-timezones

要修改当前的时区,在root权限下执行如下命令,其中 time_zone 是您想要设置的时区,请根据实际情况修改:

# timedatectl set-timezone time_zone

例如修改当前的时区,首先查询所在地域的可用时区,此处以Asia为例:

# timedatectl list-timezones | grep Asia
Asia/Aden
Asia/Almaty
Asia/Amman
Asia/Anadyr
Asia/Aqtau
Asia/Aqtobe
Asia/Ashgabat
Asia/Ashkhabad
Asia/Atyrau
Asia/Baghdad
Asia/Bahrain
Asia/Baku
Asia/Bangkok
Asia/Barnaul
Asia/Beijing
Asia/Beirut
.
.
.
Asia/Shanghai
Asia/Singapore
Asia/Srednekolymsk
Asia/Taipei
Asia/Tashkent
Asia/Tbilisi
Asia/Tehran
Asia/Tel_Aviv
Asia/Thimbu
Asia/Thimphu
Asia/Tokyo
Asia/Tomsk
Asia/Ujung_Pandang
Asia/Ulaanbaatar
Asia/Ulan_Bator
Asia/Urumqi
Asia/Ust-Nera
Asia/Vientiane
Asia/Vladivostok
Asia/Yakutsk
Asia/Yangon
Asia/Yekaterinburg
Asia/Yerevan
[root@superman-21 ~]# 

然后修改当前的时区为“Asia/Beijing”,命令如下:

[root@superman-21 ~]# timedatectl 
               Local time: 一 2022-12-05 22:09:43 CST
           Universal time: 一 2022-12-05 14:09:43 UTC
                 RTC time: 一 2022-12-05 14:09:44
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no
[root@superman-21 ~]# 
[root@superman-21 ~]# timedatectl set-timezone Asia/Beijing
[root@superman-21 ~]# 
[root@superman-21 ~]# timedatectl 
               Local time: 一 2022-12-05 22:09:54 CST
           Universal time: 一 2022-12-05 14:09:54 UTC
                 RTC time: 一 2022-12-05 14:09:55
                Time zone: Asia/Beijing (CST, +0800)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: no
[root@superman-21 ~]# 

9.2 使用date命令设置

9.2.1 显示当前的日期和时间

显示当前的日期和时间,命令如下:

# date

默认情况下,date命令显示本地时间。要显示UTC时间,添加--utc或-u参数:

# date --utc

要自定义对应的输出信息格式,添加 +“format” 参数:

# date +"format"

表 1 参数说明

格式参数 说明
%H 小时以HH格式(例如 16)。
%M 分钟以MM格式(例如 38)。
%S 秒以SS格式(例如 22)。
%d 日期以DD格式(例如 12)。
%m 月份以MM格式(例如 06)。
%Y 年份以YYYY格式(例如 2020)。
%Z 时区缩写(例如CEST)。
%F 日期整体格式为YYYY-MM-DD(例如 2022-12-05),等同%Y-%m-%d。
%T 时间整体格式为HH:MM:SS(例如 22:10:25),等同%H:%M:%S。

实际使用示例如下:

  • 显示当前的日期和本地时间。

    [root@superman-21 ~]# date
    2022年 12月 05日 星期一 22:14:39 CST
    [root@superman-21 ~]#
    
  • 显示当前的日期和UTC时间。

    [root@superman-21 ~]# date --utc
    2022年 12月 05日 星期一 14:14:54 UTC
    [root@superman-21 ~]# 
    
  • 自定义date命令的输出。

    [root@superman-21 ~]# date +"%Y-%m-%d %H:%M"
    2022-12-05 22:15
    [root@superman-21 ~]# 
    

9.2.2 修改时间

要修改当前的时间,添加--set或者-s参数。在root权限下执行如下命令,其中 HH 代表小时,MM 代表分钟,SS 代表秒,请根据实际情况修改:

# date --set HH:MM:SS

默认情况下, date命令设置本地时间。要设置UTC时间,添加--utc或-u参数:

# date --set HH:MM:SS --utc

例如修改当前的时间为23点19分00秒,在root权限下执行如下命令:

[root@superman-21 ~]# date --set 23:19:00
2022年 12月 05日 星期一 23:19:00 CST
[root@superman-21 ~]# 

9.2.3 修改日期

修改当前的日期,添加--set或者-s参数。在root权限下执行如下命令,其中 YYYY 代表年份,MM 代表月份,DD 代表某天,请根据实际情况修改:(注意,执行修改日期操作后,相应的时间会重置为00:00:00)

# date --set YYYY-MM-DD

例如修改当前的日期为2022年12月05日,命令如下:

[root@superman-21 ~]# date --set 2022-12-05
2022年 12月 05日 星期一 00:00:00 CST
[root@superman-21 ~]# 

9.3 使用hwclock命令设置

可以使用 hwclock 命令设置硬件时钟RTC (Real Time Clock) 。

9.3.1 硬件时钟和系统时钟

Linux 将时钟分为:

  • 系统时钟 (System Clock) :当前Linux Kernel中的时钟。
  • 硬件时钟 RTC:主板上由电池供电的主板硬件时钟,该时钟可以在BIOS的 “Standard BIOS Feature” 项中进行设置。

当Linux启动时,会读取硬件时钟,并根据硬件时间来设置系统时间。

9.3.2 显示日期和时间

显示当前硬件的日期和时间,在root权限下执行如下命令:

# hwclock

例如显示当前硬件的日期和时间,命令和输出如下:

[root@superman-21 ~]# hwclock
2022-12-05 22:21:19.118267+08:00
[root@superman-21 ~]# 

9.3.3 设置日期和时间

修改当前硬件的日期和时间,在root权限下执行如下命令,其中 dd 表示日,mm 表示月份,yyyy 表示年份,HH 表示小时,MM 表示分钟,请根据实际情况修改:

# hwclock --set --date "dd mm yyyy HH:MM"

例如修改当前的时间为2022年12月05日22点23分,命令如下:

[root@superman-21 ~]# hwclock --set --date "05 Dec 2022 22:23"
[root@superman-21 ~]# 

img