linux下date命令设置时间的输出格式和修改时间

  • A+
所属分类:linux技术
摘要

​ 在Linux中有硬件时钟与系统时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟;系统时钟则是指kernel中的时钟;所有Linux相关指令与函数都是读取系统时钟的设定。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟独立运作。

一.关于linux下的时间

​ 在Linux中有硬件时钟与系统时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟;系统时钟则是指kernel中的时钟;所有Linux相关指令与函数都是读取系统时钟的设定。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟独立运作。

#查看硬件时间 [root@node5 ~]# hwclock Fri 18 Sep 2020 04:32:24 PM CST  -0.429479 seconds  #查看系统时间 [root@node5 ~]# date Fri Sep 18 16:30:46 CST 2020  #时区的注释: #UTC  (Universal Time Coordinated):世界标准时间  #GMT (Greenwich Mean Time):格林尼治时间  #CST  (China standard Time):中国标准时间 

二.linux下使用date命令设置时间的输出格式

1.输出完整日期格式

#date +%F输出完整日期格式等价于date +%Y-%m-%d [root@node5 ~]# date +%F 2020-09-18  [root@node5 ~]# date +%Y-%m-%d 2020-09-18  #%y	年份最后两位数(00-99) #%Y	年份 #%m  月份(01..12) #%d	日期(例如:01) #%H	小时(00-23) #%M  分钟(00..59) #%S	秒(00-60) 

2.输出完整的时间格式

[root@node5 ~]# date "+%Y-%m-%d %H:%M:%S" 2020-09-18 18:07:46 [root@node5 ~]# date "+%F %T" 2020-09-18 18:08:08 

3.date -d显示由字符串描述的时间,而不是”当前时间“

#date -d, --date=STRING #首先查看当前时间 [root@node5 ~]# date Fri Sep 18 18:14:28 CST 2020  #输出当前时间的下一年 [root@node5 ~]# date -d "+1 years" +%F' '%T 2021-09-18 18:14:25  #在当前时间上都加一,并输出 [root@node5 ~]# date -d "+1 years +1 months +1 days +1 hours +1 minutes +1 seconds" +%F' '%T 2021-10-19 19:15:06 

三.修改linux时间

3.1 在可以访问Internet情况下修改时间

1.查看当前时间,当前时间是不对的

[root@node5 ~]# date +%F' '%T 2018-11-02 17:24:48 

2.查看当前时区

[root@node5 ~]# timedatectl       Local time: Fri 2020-09-18 17:28:38 CST   Universal time: Fri 2020-09-18 09:28:38 UTC         RTC time: Fri 2020-09-18 09:28:39        Time zone: Asia/Shanghai (CST, +0800)      NTP enabled: no NTP synchronized: no  RTC in local TZ: no       DST active: n/a 

3.设置当前时区为上海:Asia/Shanghai

[root@node5 ~]# timedatectl set-timezone Asia/Shanghai 

4.使用ntp服务同步上海授时中心时间

#如果没有安装ntp服务则需要安装 [root@node5 ~]# yum install -y ntp #启动ntp服务 [root@node5 ~]# systemctl start ntpd #查看ntp服务状态,为running则为启动成功 [root@node5 ~]# systemctl status ntpd ● ntpd.service - Network Time Service    Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)    Active: active (running) since Fri 2018-11-02 17:27:28 CST; 2s ago   Process: 9687 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS)  Main PID: 9688 (ntpd)    CGroup: /system.slice/ntpd.service            └─9688 /usr/sbin/ntpd -u ntp:ntp -g             #此命令为同步上海授时中心时间           [root@node5 ~]# ntpdate ntp.api.bz 18 Sep 17:29:04 ntpdate[9771]: the NTP socket is in use, exiting  #再次查看时间发现时间已经恢复正常 [root@node5 ~]# date +%F' '%T 2020-09-18 17:29:44  #ntp同步常用服务器: 	#中国国家授时中心:210.72.145.44 	#NTP服务器(上海) :ntp.api.bz 	#美国:time.nist.gov 	#复旦:ntp.fudan.edu.cn 	#微软公司授时主机(美国) :time.windows.com 	#台警大授时中心(台湾):asia.pool.ntp.org 

5.使用crontab设置定时同步时间任务,每天晚上23:59自动同步时间

#编写定时任务 [root@node5 ~]# crontab -e no crontab for root - using an empty one 59 23 * * *  ntpdate ntp.api.bz                                                                                        "/tmp/crontab.D94MU3" 1L, 32C written crontab: installing new crontab  #查看定时任务 #每天晚上23:59自动同步时间 [root@node5 ~]# crontab -l 59 23 * * *  ntpdate ntp.api.bz 

3.2 在无法访问Internet情况下修改时间

1.date -s, --set=STRING把时间设为字符串所描述的时间

[root@node5 ~]# date -s "2018-11-02 17:11:59" Fri Nov  2 17:11:59 CST 2018  [root@node5 ~]# date +%F' '%T 2018-11-02 17:12:56