我希望编写一个shell脚本,它将以两种格式比较两个日期时间戳之间的时间:
2013-12-10 13:25:30.123
2013-12-10 13:25:31.123
如果需要,我可以分割日期和时间(因为比较不应超过一秒 - 我正在查看报告率),因此我可以将时间格式设为13:25:30.123
/ {{1} }。
答案 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