shell 中日期与时间的运算
2023-02-18 本文已影响0人
AibWang
格式化输出
- %Y 四位长度的年份
- %m 两位长度的月份,如02,03,...,12
- %d 两位长度的天,如01,02,..
- %H 两位长度的小时(24小时制),如01,02,...,24
- %M 两位长度的分钟,如01,02,...,59
- %S 两位长度的秒,如01,02,...,59
- %N 纳秒(9位),如023000000
- %j 一年的第多少天,如001,002,...
- %A 星期几,如Monday, Tuseday, ...
- %B 月份,如January, Feberary, ...
字符串解析为日期
date -d '日期字符串'
如
date -d '2023-01-03 12:12:30.03'
date -d '2023-01-03T12:12:30.03Z'
date -d 'Jul 9 2008 08:12'
date -d 'Nov 10'
日期与时间的格式化输出
date +'格式化字符串'
如
date +'%Y-%m-%d %H:%M:%S.%N'
date +'%Y-%m-%d %H:%M:%S.%N' -d 'Jul 9 2008 08:12'
date +'%j'
date +'%j' -d 'Nov 13, 2009'
时间的加减
1、通过关键字直接用字符串解析(date -d
)
如在2023-02-19 17:36:20时间点进行加减
date -d '2 day 2023-02-19 17:36:20'
该命令得到2023-02-19 17:36:20
加2天的结果。
date -d '-2 day 2023-02-19 17:36:20'
该命令得到2023-02-19 17:36:20
减2天的结果。
同理,通过关键字 second, minute, hour, day, month, year
可以对时间进行加减计算
date -d '-2 hour 2023-02-19 17:36:20'
该命令得到2023-02-19 17:36:20
减2小时的结果。
2、将日期转换为时间戳,而后进行加减(结果以秒为单位)
Note: 时间戳是以1970-01-01 00:00:00为基准的秒数
t1=$(date +'%s' -d '2022-01-19 17:30:20.03')
t2=$(date +'%s' -d '2022-01-10 18:30:20.03')
awk -v t1=$t1 -v t2=$t2 'BEGIN{dt=t1-t2; print dt;}'
如果要获得精确计算,转换为时间戳时可以带上纳秒 date +'%s.%N'
如果要将时间戳转换为日期,格式如下:
date -d "@1676800331.2197"
同样的也可以加上格式化输出的定义。
date +'%Y-%m-%d' -d "@1676800331.2197"
获取两个时间戳的差(和)之后,通过简单的数学运算即可获得相差的天,小时,分,秒等。