比较日期时间戳

时间:2013-12-10 14:27:22

标签: shell unix

我希望编写一个shell脚本,它将以两种格式比较两个日期时间戳之间的时间:

2013-12-10 13:25:30.123
2013-12-10 13:25:31.123

如果需要,我可以分割日期和时间(因为比较不应超过一秒 - 我正在查看报告率),因此我可以将时间格式设为13:25:30.123 / {{1} }。

3 个答案:

答案 0 :(得分:3)

要找到两个时间戳的较新(或较旧),您可以使用字符串比较运算符:

time1="2013-12-10 13:25:30.123"
time2="2013-12-10 13:25:31.123"

if [ "$time1" > "$time2" ]; then
    echo "the 2nd timestamp is newer"
else
    echo "the 1st timestamp is newer"
fi

并且,找到时差(测试):

ns1=$(date --date "$time1" +%s%N)
ns2=$(date --date "$time2" +%s%N)
echo "the difference in seconds is:" `bc <<< "scale=3; ($ns2 - $ns1) / 1000000000"` "seconds"

在您的情况下打印

the difference in seconds is: 1.000 seconds

答案 1 :(得分:2)

在比较之前将它们转换为时间戳:

if [ $(date -d "2013-12-10 13:25:31.123" +%s) -gt $(date -d "2013-12-10 13:25:30.123" +%s) ]; then
  echo "blub";
fi

答案 2 :(得分:0)

使用Perl使用包含的Time :: Piece库:

perl -MTime::Piece -nE '
    BEGIN {
        $, = "\t";
        sub to_seconds {
            my ($dt, $frac) = (shift =~ /(.*)(\.\d*)$/);
            return(Time::Piece->strptime($dt, "%Y-%m-%d %T")->epoch + $frac);
        }
    }
    if ($. > 1) {
        $a = to_seconds($_); 
        $b = to_seconds($prev); 
        say $a, $b, $a-$b
    } 
    $prev = $_
'<<END
2013-12-10 13:25:30.123
2013-12-10 13:25:31.123
2013-12-10 13:25:42.042
END
1386681931.123  1386681930.123  1
1386681942.042  1386681931.123  10.9190001487732