linux · 2022年 5月 6日 0

系统时间日期date_time

设置时间和日期

CentOS 7 有两种类型的时间:

  • 实时时间/硬件时间(Real-Time Clock,RTC),完全独立于操作系统运行,一般是由主板上的COMS负责维护,因此在操作系统关闭后也能运行。
  • 系统时间/软件时间(System Time),由Linux内核维护,其初始值基于硬件时间,一旦Linux启动并且系统时间被初始化,系统时间就完全独立于硬件时间。

CentOS 7 提供了三个命令行工具,可以用来显示和配置时间:timedatectl,date,hwclock。

  • timedatectl是CentOS 7的新工具,可以同时管理系统时间和硬件时间
  • date是CentOS 6就有的工具,只能管理系统时间,一般是脚本中用于格式化输出时间
  • hwclock主要用于管理硬件时间。

timedatectl命令

  • 显示当前时间和日期
[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
[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

[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服务,具体取决于安装的是哪个。

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

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

参考文献:cnblog

双系统时间不一致

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

# 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 时间正确的情况下,只需:

# sudo hwclock -w

然后查看验证

# sudo hwclock -r
# sudo hwclock --show

参考文献

date 有趣的命令

显示或设置系统时间

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

一年中的第几天

今天一年中的第几天

liupei@T470:~$ date +%j
221

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

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

一年中第几周

今天第几周

liupei@T470:~$ date +%V
32

指定的日期是第几周

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

一百天以前的日期

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

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