date常见用法:
# date
Sun Mar 20 15:58:01 CST 2021
定义输出时间的格式:
# date "+%Y-%m-%d %H:%M:%S"
2021-07-20 15:56:34
更多格式变量可以通过 date --help 来获取
-d 选项可以用来进行时间运算
# date "+%D"
03/20/22
# date "+%D" -d "-100 month"
11/20/13
-s 选项可以设置系统时间,接受多种形式
# date -s "20220101 10:10:10"
Sat Jan 1 10:10:10 CST 2022
# date -s "2022-01-01 11:11:11"
Sat Jan 1 11:11:11 CST 2022
# date -s "2022/01/01 12:12:12"
Sat Jan 1 12:12:12 CST 2022
# date -s "13:13:13 20220302"
Wed Mar 2 13:13:13 CST 2022
# date -s "20220320"
Sun Mar 20 00:00:00 CST 2022
date -s 命令修改的是系统时间,默认不保存到硬件时钟,如果需要,使用hwclock命令同步:
hwclock -w :同步系统时间到硬件时钟
hwclock -s : 同步硬件时间到系统时间
必须掌握的命令:timedatectl
输出
# timedatectl
Local time: Sun 2022-03-20 16:23:26 CST
Universal time: Sun 2022-03-20 08:23:26 UTC
RTC time: Sun 2022-03-20 08:23:26
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
以下几个概念必须搞清楚:
RTC(Real Time Clock)时钟芯片,它其实就是硬件时钟
Universal time 协调世界时(UTC),通常与格林尼治时间(GMT)视作等同
Time zone, 时区,
Local time,本地时间 = UTC + Time zone,如 16:23:26 CST(中国标准时间) = 08:23:26 UTC + 8
NTP enabled,网络时间同步服务是否开启
NTP synchronized,是否已经和网络时间同步过
RTC in local TZ :RTC 时钟是否使用本地时间,no为不使用本地时间,一般与UTC相同;yes为使用本地时间,与Local time相同。
DST active, 是否开启夏令时,中国在1986年实施过夏令时,1992年起停止实施(太复杂)。对于实施夏令时的地区,Linux 系统会自动按当地时区情况进行调整,不需要人为干预,只须确定时区正确。
timedatectl 常用命令:
列出所有的时区
timedatectl list-timezones
设置时区:
timedatectl set-timezone Asia/Shanghai
常见问题:由于 Windows 和 Linux 时钟算法区别,如上 RTC in local TZ 如果设置为 no,将导致 Linux 下硬件时钟置为 UTC 时间,这样如果有双系统,Windows 从硬件时钟中读取系统时间就会慢了8小时(CST东8区)。 此情况下,需要将 RTC in local TZ 设置为 yes,命令:timedatectl set-local-rtc 1
timedatectl set-local-rtc 1
[root@Test1 ~]# timedatectl
Local time: Sun 2022-03-20 16:58:45 CST
Universal time: Sun 2022-03-20 08:58:45 UTC
RTC time: Sun 2022-03-20 16:58:45
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: yes
DST active: n/a
设置为 no, 命令为:timedatectl set-local-rtc 0
timedatectl set-time “2022-03-20 16:58:45” :设置系统时间
timedatectl set-ntp true/false :控制是否与网络时间同步