设置时间和日期
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
(或者y
,true
,t
,1
)替换boolean
,若要配置系统使用UTC
,请用NO
(或者n
,false
,f
,0
)替换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
将启用chronyd
或ntpd
服务,具体取决于安装的是哪个。
[root@localhost ~]# timedatectl set-ntp boolean
请用yes
(或者y
,true
,t
,1
)替换boolean
,若要配置系统使用UTC
,请用NO
(或者n
,false
,f
,0
)替换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