首页 > 解决方案 > 比较 bash 中以 YYYY-MM-DDTHH:MM:SSZ 格式给出的两次时间

问题描述

给出两次说 2021-06-25T04:04:28Z 和 2021-06-18T19:36:31Z 其中第一次表示 2021 年 6 月 26 日凌晨 4:04(+28 秒),第二次表示 2021 年 6 月 18 日晚上 7:36(+31 秒)。我想编写一个 bash 脚本来比较这两次,并可以告诉我这两个事件是否相隔不到 20 分钟。是否有一个函数可以做到这一点,或者我必须尝试解析它然后以这种方式进行比较。因此,对于上述输入,我想回显“时间不在 20 分钟内”

谢谢!

标签: bashshell

解决方案


date命令可以解析和转换日期/时间数据。

$: a=$( date --date="2021-06-18T19:36:31Z" +%s )
$: b=$( date --date="2021-06-25T04:04:28Z" +%s )

自 70 年 1 月 1 日以来,%s格式以秒为单位输出结果。

$: echo $a $b
1624044991 1624593868

所以你可以用它做简单的整数数学。

$: secs=$(( b - a ))
$: secs=${secs#-}    # get the absolute value
$: if (( secs < ( 20 * 60 ) )); then echo "within 20m"; else echo ">20m"; fi
>20m

推荐阅读