Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

设置时间和日期

CentOS 7 有两种类型的时间:

  • 实时时间/硬件时间(Real-Time Clock,RTC),完全独立于操作系统运行,一般是由主板上的COMS负责维护,因此在操作系统关闭后也能运行。
  • 系统时间/软件时间(System Time),由Linux内核维护,其初始值基于硬件时间,一旦Linux启动并且系统时间被初始化,系统时间就完全独立于硬件时间。 CentOS 7 提供了三个命令行工具,可以用来显示和配置时间:timedatectl,date,hwclock。
  • timedatectl是CentOS 7的新工具,可以同时管理系统时间和硬件时间
  • date是CentOS 6就有的工具,只能管理系统时间,一般是脚本中用于格式化输出时间
  • hwclock主要用于管理硬件时间。

timedatectl命令

  • 显示当前时间和日期

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@localhost ~]# timedatectl 
    Local time: Fri 2018-07-20 17:46:09 CST #(本地时间,与系统设置的时区有关系,北京时间简写CST)
    Universal time: Fri 2018-07-20 09:46:09 UTC #(协调世界时,简写为UTC)
    RTC time: Fri 2018-07-20 09:46:09 RTC #(硬件时间,默认显示时间是UTC时间)
    Time zone: Asia/Shanghai (CST, +0800) #(当前时区)
    NTP enabled: yes #(是否设置NTP服务开机启动)
    NTP synchronized: yes #(NTP服务是否已经同步时间)
    RTC in local TZ: no #(硬件时间是否是本地时区)
    DST active: n/a #(夏令时是否可用 n/a(Not applicable,不可用))
  • 修改本地时间
    [root@localhost ~]# timedatectl set-time 12:12:12  //修改为12:12:12
    该命令同时修改系统时间和硬件时钟,其结果类似于同时使用date -set(设置系统时间)加上hwclock -systohc(将系统时间写入硬件时间,-systohc-w)命令,如果timedatectl set-time出现以下提示Failed to set time: Automatic time synchronization is enabled,是因为启用了NTP

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@localhost ~]# timedatectl 
    Local time: Fri 2018-07-20 17:46:09 CST
    Universal time: Fri 2018-07-20 09:46:09 UTC
    RTC time: Fri 2018-07-20 09:46:09
    Time zone: Asia/Shanghai (CST, +0800)
    NTP enabled: yes
    NTP synchronized: yes
    RTC in local TZ: no
    DST active: n/a

    如果确实有手动设置时间的需求,timedatectl手动关闭NTP服务,或者使用date -s

    1
    [root@localhost ~]# timedatectl set-ntp false   //禁用NTP

    默认情况下,系统配置硬件时间使用UTC,使硬件时间使用本地时间,请使用以下命令
    [root@localhost ~]# timedatectl set-local-rtc boolean
    若要配置系统以在本地时间保持时钟,请用yes(或者ytruet1)替换boolean,若要配置系统使用UTC,请用NO(或者nfalsef0)替换boolean,默认值为no.

  • 修改本地日期
    [root@localhost ~]# timedatectl set-time 2011-12-01  //设置日期为2011年12月1日
    请注意,只更改日期而不指定时间将会导致时间设置为00:00:00,设置完整时间格式如下
    [root@localhost ~]# timedatectl set-time "2022-10-10 11:11:11"

  • 设置时区
    列出所有时区
    [root@localhost ~]# timedatectl list-timezones
    查找亚洲时区
    [root@localhost ~]# timedatectl list-timezones |grep Asia
    设置时区为 亚洲/上海
    [root@localhost ~]# timedatectl set-timezone Asia/Shanghai

设置时间同步

timedatectl命令还允许您使用NTP协议,启用与远程服务器的系统时钟自动同步;启用NTP将启用chronydntpd服务,具体取决于安装的是哪个。

1
[root@localhost ~]# timedatectl set-ntp boolean

请用yes(或者ytruet1)替换boolean,若要配置系统使用UTC,请用NO(或者nfalsef0)替换boolean,默认值为no.

参考文献:cnblog

双系统时间不一致

原因:linux 硬件时钟 RTC 时间为 UTC 时间,windows 硬件时间为当地时间,即

1
2
# linux  : RTC = UTC
# windows: RTC = local

解决方法:

  • 在同步时间前需要先检查时区是否是china的CTS时区

必须确保时区准确,否则时间同步后显示不正常,输入date,显示如下:

Fri May 6 04:24:38 PM CST 2022

如果时区不正确,如,在中国,时区是CTS,若不是,修改方式:

执行命令: tzselect

  • 操作系统有两个时间: 软件时间和硬件时间

软件时间: 查看方式 date,是距离1970.1.1的时间差;

硬件时间: sudo hwclock -r,硬件时间是BIOS的时间。

因此在保证 date 时间正确的情况下,只需:

1
# sudo hwclock -w

然后查看验证

1
2
# sudo hwclock -r
# sudo hwclock --show

参考文献

date 有趣的命令

显示或设置系统时间

1
2
liupei@T470:~$ date
2021年 08月 09日 星期一 21:53:46 CST

一年中的第几天

今天一年中的第几天

1
2
liupei@T470:~$ date +%j
221

指定的日期是一年中第几天

1
2
liupei@T470:~$ date -d '20221001' +%j
274

一年中第几周

今天第几周

1
2
liupei@T470:~$ date +%V
32

指定的日期是第几周

1
2
liupei@T470:~$ date -d '20221001' +%V
39

一百天以前的日期

一百天以前是几月几日星期几

1
2
liupei@T470:~$ date -d '-100 days'
2021年 05月 01日 星期六 21:59:52 CST

评论