Linux date命令
可用标记如下
时间
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..59)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区
日期
%a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yyyy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)
[例] 将以上查询结果打印出来,datetest.sh内容如下
#!/bin/bash
para=`cat para.txt`
current_time=`date`
echo 'Current time is' `date "+%c"`
for i in $para
do
echo $i `date "+$i"`
done
para.txt内容为
%H
%I
%k
%l
...
[root@xxx ~]# date -s "2019-11-26 14:09:18"
Tue Nov 26 14:09:18 CST 2019
[root@xxx ~]# ./datetest.sh
Current time is Tue 26 Nov 2019 02:09:22 PM CST
%H 14
%I 02
%k 14
%l 2
%M 09
%p PM
%r 02:09:22 PM
%s 1574748562
%S 22
%T 14:09:22
%X 02:09:22 PM
%Z CST
%a Tue
%A Tuesday
%b Nov
%B November
%c Tue 26 Nov 2019 02:09:22 PM CST
%d 26
%D 11/26/19
%h Nov
%j 330
%m 11
%U 47
%w 2
%W 47
%x 11/26/2019
%y 19
%Y 2019
[root@xxx ~]# date -s "2019-11-26 06:27:05"
Tue Nov 26 06:27:05 CST 2019
[root@xxx ~]# ./datetest.sh
Current time is Tue 26 Nov 2019 06:27:08 AM CST
%H 06
%I 06
%k 6
%l 6
%M 27
%p AM
%r 06:27:08 AM
%s 1574720828
%S 08
%T 06:27:08
%X 06:27:08 AM
%Z CST
%a Tue
%A Tuesday
%b Nov
%B November
%c Tue 26 Nov 2019 06:27:08 AM CST
%d 26
%D 11/26/19
%h Nov
%j 330
%m 11
%U 47
%w 2
%W 47
%x 11/26/2019
%y 19
%Y 2019
[root@xxx ~]#
[root@xxx ~]# date -s "2019-11-26 12:17:05"
Tue Nov 26 12:17:05 CST 2019
[root@xxx ~]#
[root@xxx ~]# date -s "2019-11-26 00:17:05"
Tue Nov 26 00:17:05 CST 2019
[root@xxx ~]# ./datetest.sh
Current time is Tue 26 Nov 2019 12:17:07 AM CST
%H 00
%I 12
%k 0
%l 12
(...省略...)
[root@xxx ~]# date -s "2019-11-26 12:17:05"
Tue Nov 26 12:17:05 CST 2019
[root@xxx ~]# ./datetest.sh
Current time is Tue 26 Nov 2019 12:17:06 PM CST
%H 12
%I 12
%k 12
%l 12
(...省略...)
[root@xxx ~]#
简单计算
显示昨天
date -d 'yesterday' '+%Y-%m-%d %H:%M:%S'
date -d '-1 days' '+%Y-%m-%d %H:%M:%S'
显示明天
date -d 'tomorrow' '+%Y-%m-%d %H:%M:%S'
date -d '+1 days' '+%Y-%m-%d %H:%M:%S'
date -d '1 days' '+%Y-%m-%d %H:%M:%S'
显示两小时之前(-)的两分钟之后(+或省略符号)
date -d '-2 hours 2 minutes' '+%Y-%m-%d %H:%M:%S'
[例] 打印前一天后一天、两分钟之后等(里面的量词加不加s都可以)
[root@xxx ~]# date '+%Y-%m-%d %H:%M:%S';date -d '-2 hour 2 minute' '+%Y-%m-%d %H:%M:%S'
2019-11-26 19:18:43
2019-11-26 17:20:43
[root@xxx ~]# date -d 'yesterday' '+%Y-%m-%d %H:%M:%S'
2019-11-25 19:19:06
[root@xxx ~]# date -d '-3 days' '+%Y-%m-%d %H:%M:%S'
2019-11-23 19:19:55
[root@xxx ~]# date -d 'tomorrow' '+%Y-%m-%d %H:%M:%S'
2019-11-27 19:20:12
[root@xxx ~]#
转格式
# date -d "2020-03-02" +"%Y/%m/%d %H:%M:%S"
2020/03/02 00:00:00
计算执行命令花费的时间,caltime.sh内容如下
#!/bin/bash
start=$(date +%s)
find /opt -name template* &> /dev/null
end=$(date +%s)
delta=$(( end - start ))
echo It takes $delta seconds.
执行结果:It takes 1 seconds.
把查找路径改成 “/” ,执行结果: It takes 8 seconds.
结合定时任务,每天定时将模板文件中的日期更新
#!/bin/bash
today=`date "+%y-%m-%d"`
yesterday=`date -d "-1 day" "+%y-%m-%d"`
sed -i "s/$yesterday/$today/g" /srv/dailytem.log
参考资料:
菜鸟教程 https://www.runoob.com/linux/linux-comm-date.html