跳到主要内容

Linux时间服务相关命令

更新于:2023年12月17日

Linux时间服务相关命令

img

目录

[toc]

1、显示与设定系统时钟:date命令

选项

date命令使用“+”来传递参数。

%A 显示周
%a 显示周(前3个字母,其缩写形式)

%B 显示月份(全格式)
%b 显示月份(简写)

%F 代表获取年月日

%Y表示年、%m表示月、%d表示天、
%H表示小时、%M表示分钟、%S表示秒;(%T==%H:%M:%S)
%s表示时间戳
%T 代表小时:分钟:秒
%y 代表年份最后2位数

1.显示系统时间

例子:显示系统时间:date;hwclock;clock

[root@gitlab-runner ~]#date
Wed May 18 07:23:01 CST 2022
[root@gitlab-runner ~]#hwclock
cWed 18 May 2022 07:23:04 AM CST -0.282491 seconds
[root@gitlab-runner ~]#clock
Wed 18 May 2022 07:23:05 AM CST -0.065940 seconds

例子:显示具体时间(常用) date +%F_%T

[root@hg-linux-test ~]# date +%F_%T
2023-12-17_21:52:55
[root@hg-linux-test ~]# date +%F_%H:%M:%S
2023-12-17_21:53:01


[root@docusaurus-wiki ~]# date +%F_%H-%M-%S
2024-03-24_05-16-37

例子:获取年月日:date +%Y-%m-%d 或者 date +%F

[root@hg-linux-test ~]# date +%F
2023-12-17
[root@hg-linux-test ~]# date +%Y-%m-%d
2023-12-17

##注意:%y 代表年份最后2位数
[root@hg-linux-test ~]# date +%y-%m-%d
23-12-17

例子:获取时间戳:date +%s

[root@gitlab-runner ~]#date +%s #%s表示时间戳
1652830295

[root@gitlab-runner ~]#date --date=20150820 +%s #获取2015/08/20 的时间戳。
1440000000

# %s表示linux时间戳的秒数。
# Unix时间戳(英文为Unixepoch, Unix time, POSIX time 或 Unix timestamp)
# 是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。

例子:显示周几:date +%A ;date +%a

[root@gitlab-runner ~]#date +%A
Wednesday

[root@gitlab-runner ~]#date +%a
Wed

# 说明:
%A 显示周
%a 显示周(前3个字母,其缩写形式)

例子:显示月份:date +%B;date +%b

[root@hg-linux-test ~]# date +%B
December
[root@hg-linux-test ~]# date +%b
Dec

# %B 显示月份(全格式)
# %b 显示月份(简写)

例子:显示昨天和明天

#当前日期:
[root@k8s-master ~]#date
Mon May 30 21:49:36 CST 2022

[root@k8s-master ~]#date -d yesterday
Sun May 29 21:51:58 CST 2022
[root@k8s-master ~]#date -d tomorrow
Tue May 31 21:52:03 CST 2022

或者:
[root@k8s-master ~]#date +%Y%m%d -d "-1 day"
20220529
[root@k8s-master ~]#date +%Y%m%d -d "+1 day"
20220531

例子:显示本月和下月

[root@k8s-master ~]#date +%Y%m%d -d "-1 month"
20220430
[root@k8s-master ~]#date +%Y%m%d -d "+1 month"
20220630

或者:
[root@k8s-master ~]#date +%Y%m%d --date="-1 month"
20220430
[root@k8s-master ~]#date +%Y%m%d --date="+1 month"
20220630

例子:shell脚本指定日期减去一天或几天

date -d参数可以根据当前日期获取更多我们需要的日期。

#如果只减去一天的话,直接写就可以了。
#date -d"yesterday 20150401" +%Y%m%d
[root@k8s-master ~]#date -d"yesterday 20150401" +%Y%m%d
20150331

#如果要减去几天,还可以这样写,如果用负数是往前数,
#date -d"10 day ago 2015-04-01" +%Y-%m-%d
[root@k8s-master ~]#date -d"10 day ago 2015-04-01" +%Y-%m-%d
2015-03-22

#在指定的日期上加上指定的小时
[dc@dc010.tj.momo.com init_env]$ date -d "20150416 12 3 hour" +"%Y%m%d%H"
2015041615

#在指定的日期上减去指定的小时
[dc@dc010.tj.momo.com init_env]$ date -d "20150416 12 -1 hour" +"%Y%m%d%H"
2015041611

#在指定的日期上加上指定的分钟
[dc@dc010.tj.momo.com init_env]$ date -d "20150416 12:20 10 minute" +"%Y%m%d%H%M"
201504161230

2.修改系统时间

例子:修改日期和时间

date -s '2015-04-11 13:15:15'

img

date命令修改完时间后,系统时间立即且永久生效,再次登录shell发现已经是修改后的时间了:

例子:修改日期

[root@localhost ~]# date -s 2015/08/23 #设置日期
Sun Aug 23 00:00:00 CST 2015

img

或者:

img

例子:修改时间

[root@localhost ~]# date -s 19:18:30 #设置时间
Sun Aug 9 19:18:30 CST 2015

img

2、显示与设定硬件时钟:clock命令 & hwclock命令

命令介绍

hwclock命令是一个硬件时钟访问工具,它可以显示当前时间、设置硬件时钟的时间和设置硬件时钟为系统时间,也可设置系统时间为硬件时钟的时间。

hwclock和clock用来显示与设定硬件时钟,不过hwclock和clock可以视为一个命令。(clock是hwclock的软连接。

# type -a hwclock
hwclock is /sbin/hwclock
hwclock is /usr/sbin/hwclock

# type -a clock
clock is /sbin/clock

# ls -l /sbin/clock
lrwxrwxrwx. 1 root root 7 1213 2013 /sbin/clock -> hwclock

命令选项

–debug 	显示hwclock执行时详细的信息。
–directisa hwclock预设从/dev/rtc设备来存取硬件时钟。若无法存取时,可用此参数直接以I/O指令来存取硬件时钟。
–set –date=<日期与时间> 设定硬件时钟。
–show 显示硬件时钟的时间与日期。
–systohc 将硬件时钟调整为与目前的系统时钟一致。
–test 仅测试程序,而不会实际更改硬件时钟。
–utc 若要使用格林威治时间,请加入此参数,hwclock会执行转换的工作。
–version 显示版本信息。
-w, --systohc 以系统时钟为准,校正硬件时钟
-s, --hctosys 以硬件时钟为准,校正系统时钟

1.查看硬件时间:clock 或者 hwclock

[root@k8s-master ~]#clock
Tue 31 May 2022 06:51:04 AM CST -0.178876 seconds
[root@k8s-master ~]#hwclock
Tue 31 May 2022 06:51:08 AM CST -0.677708 seconds

2. 设置硬件时钟

例子:设置硬件时钟

clock --set --date='2015/08/23 19:33:00' #设置硬件时间
hwclock --set --date '2015-04-11 13:36:11'

例子:将系统时钟同步-->到硬件时钟

方法1  clock -w
# date
2015年 04月 11日 星期六 20:36:26 CST
# clock
2015年04月11日 星期六 13时41分18秒 -0.437760 seconds

# clock -w #将系统时钟同步到硬件时钟
# clock
2015年04月11日 星期六 20时37分36秒 -0.515922 seconds
方法2   clock --systohc
# clock --set --date="08/16/2013 13:26:00"
# clock
2013年08月16日 星期五 13时26分04秒 -0.390867 seconds
# date
2015年 04月 11日 星期六 20:41:13 CST
# clock --systohc
# clock
2015年04月11日 星期六 20时43分18秒 -0.094007 seconds

例子:将硬件时钟同步-->到系统时钟

# clock --set --date="08/16/2013 13:26:00" 

# clock
2013年08月16日 星期五 13时26分03秒 -0.281525 seconds
# date
2015年 04月 11日 星期六 20:45:14 CST

# clock --hctosys \\时钟同步
# date
2013年 08月 16日 星期五 13:26:22 CST
# clock
2013年08月16日 星期五 13时26分25秒 -0.406511 seconds

例子:一般情况,我们把系统时钟与网络时钟同步,再同步到硬件时钟

#1 ntpdate 0.rhel.pool.ntp.org
11 Apr 13:48:03 ntpdate[5786]: step time server 202.112.29.82 offset 52100210.175926 sec
# date
2015年 04月 11日 星期六 13:48:14 CST

#2 clock -w
# clock
2015年04月11日 星期六 13时48分30秒 -0.750266 seconds

3、时区:timedatectl命令

例子:查看日期时间及NTP状态(包括时区)

[root@k8s-master ~]#timedatectl 
Local time: Tue 2022-05-31 07:14:15 CST
Universal time: Mon 2022-05-30 23:14:15 UTC
RTC time: Mon 2022-05-30 23:14:15
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a

例子:配置时区

(1)查看当前时区:

查看时间:

img

或者用如下命令查看:

ll /etc/localtime

img

(2)配置时区

#查看有哪些时区:timedatectl list-timezones |more
[root@k8s-master ~]#timedatectl list-timezones |more
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
……

(3)配置为亚洲/上海时区:

timedatectl set-timezone Asia/Shanghai

(4)再次查看当前时区:

img

例子:OpenStack中配置时间同步服务方法

img

注意:

同步时间 //注意这里原来装系统时已经选好了上海时区,这里就不再选择时区了。

[root@openstack-template ~]# date
Sun Oct 11 09:28:12 CST 2020
#1
[root@openstack-template ~]# ntpdate time1.aliyun.com # 和阿里云同步时间

#2
11 Oct 09:36:35 ntpdate[1618]: step time server 203.107.6.88 offset 5.388041 sec
[root@openstack-template ~]# hwclock -w # 同步时间到硬件

[root@openstack-template ~]# date
Sun Oct 11 09:36:57 CST 2020
[root@openstack-template ~]#

#3
这边做个定时任务:由于后期虚机可能要迁移
[root@openstack-template ~]# whereis ntpdate
ntpdate: /usr/sbin/ntpdate /usr/share/man/man8/ntpdate.8.gz
crontab: installing new crontab
*/10 * * * * /usr/sbin/ntpdate time1.aliyun.com && hwclock -w

例子:自己vmwareworkstation虚机系统时钟与当前时间不一致问题(已解决)

2021.3.10

注意,自己的vmwareworkstation虚机date查看的系统时钟比实际慢了好几个小时。且clock显示的硬件时钟时间是12格式制的,这个貌似正常。

img

#默认无ntp服务,因此无法用ntpdate命令与网络时间同步
[root@localhost ~]# rpm -qa|grep ntp
#安装ntp

[root@localhost ~]# yum install -y ntp
#与阿里云ntp服务同步
[root@localhost ~]# ntpdate time1.aliyun.com
10 Mar 14:21:24 ntpdate[18073]: step time server 203.107.6.88 offset 126659.756107 sec
[root@localhost ~]# hwclock -w #同步时间到硬件时钟
[root@localhost ~]# date #总这里可以看到,date显示的系统时钟是4进制格式,而clock显示的硬件时钟依然是12进制格式。
Wed Mar 10 14:21:37 CST 2021
[root@localhost ~]# clock
Wed 10 Mar 2021 02:21:39 PM CST -0.149360 seconds

注意:CST概念,utc为标准时区

img

#中国比美国快13个小时:

img

#GMT+8 东八区

img

#CST可视为美国、澳大利亚、古巴或中国的标准时间。

img

注意:ntpdate可同步的时区

  • 案例

img

  • 例子:和阿里云同步时间
[root@openstack-template ~]# ntpdate time1.aliyun.com

案例:禁用ntp

timedatectl set-ntp false

如果NTP已成功禁用,则应该看到以下输出:
NTP sync status: not synchronized

4、显示日历:cal命令

例子:cal # 默认显示当月日历

img

例子:cal 2030 # 显示某年的日历

img

例子:cal -y # -y选项代表本年的日历

img

例子:cal 11 2020 # 显示某年某个月份

img

FAQ

案例:shell脚本-利用变量输出当前时间

[root@hg-linux-test ~]# DATETIME=$(date "+%Y-%m-%d_%T_%A")
[root@hg-linux-test ~]# echo $DATETIME
2023-12-17_21:58:53_Sunday

时间服务器

a24c99d98d151ce917c82a1d4c6cd3d

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码 x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号 《云原生架构师实战》

image-20230107215126971

🍀 个人博客站点

http://onedayxyy.cn/

🍀 语雀

https://www.yuque.com/xyy-onlyone

🍀 csdn

https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎

https://www.zhihu.com/people/foryouone

image-20230107215203185

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!


0%