我正在尝试比较两个时间戳,如果 x 大于 y,则执行一些操作。我在 Linux 机器上用 bash 尝试过,但收到错误“无效日期”,这是我的代码:
#!/bin/bash
x='2020.01.23 14:41:18.554'
y='2020.01.23 17:17:02.323'
if [[ $(date -d "$x") -gt $(date -d "$y") ]]
then
echo -e "first value is greater than second"
#### Perform some actions
#### Perform some actions
else
echo "second value is greater, so do nothing"
fi
exit
当我运行脚本时,出现以下错误
date: invalid date `2020.01.23 14:41:18.554'
date: invalid date `2020.01.23 17:17:02.323'
我尝试将整个值转换为纪元时间然后进行比较,但在纪元时间中,不计算毫秒。如何才能正确进行这种比较,包括毫秒?谢谢。
答案1
你的例子有两个问题。
首先,您需要将.
日历日期中的 替换为/
或-
。这消除了无效日期错误。
然后您需要添加+%s%N
到您的date
命令中。这会将日期转换为以纳秒为单位的纪元时间。
下面的代码对我来说效果很好。
x='2020/01/23 14:41:18.554'
y='2020/01/23 17:17:02.323'
if [[ $(date -d "$x" +%s%N) -gt $(date -d "$y" +%s%N) ]]
then
echo -e "first value is greater than second"
#### Perform some actions
#### Perform some actions
else
echo "second value is greater, so do nothing"
fi
exit
编辑:参见https://stackoverflow.com/questions/16548528/command-to-get-time-in-milliseconds为了与纳秒兼容
答案2
您的所有时间戳都将采用示例中使用的形式吗?如果是这样,您可以将它们作为字符串进行比较。