https://www.jianshu.com/p/cc9ebb212a8e
整理Linux Shell脚本中常用的日期操作,给予date
命令,主要用法总结
date
,date '+%s'
date -d
date '+%'
date '+%'
date -d
字符串大小
data '+%s'
直接使用date命令就可以得到当前时间日期,输出格式是CST格式
date
2021年 08月 17日 星期二 22:34:35 CST
获得当前日期的正常格式,比如时间日期型%Y-%m-%d $H:%M:%S
,或者日期型%Y-%m-%d
,%Y%m%d
,使用+日期格式
实现格式化,date后面必须要有至少一个空格,如果日期格式存在空格需要用引号包起来
date '+%Y-%m-%d %H:%M:%S'
2021-08-17 22:49:57
date '+%Y-%m-%d'
2021-08-17
date '+%Y%m%d'
20210817
date +%Y%m%d
20210817
获得当前时间戳,使用+%s
即可获得10位时间戳
date +%s
1629211600
日期解析使用data -d
命令,可以解析指定的字符串日期为CST格式时间
date -d '2021-06-18 13:13:13'
2021年 06月 18日 星期五 13:13:13 CST
date -d '2021-06-18'
2021年 06月 18日 星期五 00:00:00 CST
date -d '20210618'
2021年 06月 18日 星期五 00:00:00 CST
date -d接受字符串描述,可以使用以下格式语句将10位时间戳转化为日期格式
date -d @1629535772
2021年 08月 21日 星期六 16:49:32 CST
进一步将时间戳转化为指定格式日期
date -d @1629535772 '+%Y-%m-%d %H:%M:%S'
2021-08-21 16:49:32
# 日期型转年月
date -d '2021-05-18' '+%Y-%m'
2021-05
# 日期型转时间日期型
date -d '2021-05-18' '+%Y-%m-%d %H:%M:%S'
2021-05-18 00:00:00
日期格式化输出使用类似于' +%Y-%m-%d'
的格式
# 将时间日期型转化为日期型
date -d '2021-05-18 13:12:19' '+%Y-%m-%d'
2021-05-18
提取年,月,日,时,分,秒
date +%Y # 2021
date +%m # 08
date +%d # 21
date +%H # 17
date +%M # 16
date +%S # 07
# 提取指定时间的年
date -d '2018-05-13' '+%Y' # 2018
以当下时间为基准,可以使用字符串描述求明天,昨天,几小时,几天之前的日期
date -d 'yesterday'
2021年 08月 20日 星期五 17:24:14 CST
date -d 'tomorrow'
2021年 08月 22日 星期日 17:24:54 CST
date -d 'next day'
2021年 08月 22日 星期日 17:24:54 CST
date -d '2 days ago'
2021年 08月 19日 星期四 17:24:24 CST
date -d '1 hour ago'
2021年 08月 21日 星期六 16:24:33 CST
也可以对指定的日期进行间隔计算
# 求指定日期的之前1个小时
date -d '2021-03-03 11:11:11 1 hour ago'
2021年 03月 03日 星期三 10:11:11 CST
# 求指定日期之前1天的时间
date -d '2021-01-01 -1day'
# 求指定日期之后1天的时间
date -d '2021-01-01 +1day'
2021年 01月 02日 星期六 00:00:00 CST
# 求指定日期之前1分钟
date -d '2021-01-01 1 minute ago'
2020年 12月 31日 星期四 23:59:00 CST
先转化为时间戳,求间隔的秒数,然后再求对应的时分天
# 求几个几天
t1='2021-03-12'
t2='2021-03-18'
diff=$(((`date -d "$t2" '+%s'` - `date -d "$t1" '+%s'`) / 86400))
echo $diff # 6
日期比较大小直接使用字符串形式比较,比较符是>
,<
,=
,使用双中括号
进行比较,如果是单中括号对于>需要转义\>
[[ '2021-01-01' > '2021-12-26' ]] && echo 1 || echo 0
0
[[ '2021-01-01' > '2020-12-26' ]] && echo 1 || echo 0
1
耗时使用时间戳秒格式进行相减即可
#!/bin/bash
t1=`date '+%s'`
sleep 3
t2=`date '+%s'`
echo $((t2 - t1)) # 输出3