如何检查“日期时间”时间戳是否在两个“日期时间”时间戳之间

如何检查“日期时间”时间戳是否在两个“日期时间”时间戳之间

我搜索并找到了几种方法来检查时间戳是否在两个时间戳之间,但所有方法方法假设 HH:MM:SS只考虑格式,不考虑日期

我的现实生活场景是从日志文件输入的时间戳,采用常见格式,包括日期和毫秒:2019-11-11 19:05:55,823.

假设我有一个给定的时间戳2019-11-11 19:05:55,823,我如何确定它是在范围内还是之外:

2019-11-11 17:02:54,479
2019-11-12 05:13:55,998

答案1

特别是对于 bash,它应该只是一个问题:

start='2019-11-11 17:02:54,479'
end='2019-11-12 05:13:55,998'
date='2019-11-11 19:05:55,823'

if LC_ALL=C command eval '[[ ! $date < $start && ! $date > $end ]]'; then 
  echo the date is in the range
fi

这会进行词汇比较。这是可行的,因为在 C 语言环境中,这些日期表示形式按词汇和时间顺序排序是相同的。

bash[[ < / > ]]运算符用于strcoll()比较字符串,因此使用本地化排序算法。在 C 语言环境中strcoll()意味着像strcmp().在其他语言环境中,它会根据语言环境的约定进行比较,因此您无法对结果得到太多保证。

POSIXly,你可以使用:

if LC_ALL=C expr "x $date" '>=' "x $start" '&' "x $date" '<=' "x $end" > /dev/null; then
  echo the date is in the range
fi

现在,如果您正在处理日志文件,您可能希望与awk.假设时间戳位于每行的开头:

LC_ALL=C awk -v start='2019-11-11 17:02:54,479' \
             -v end='2019-11-12 05:13:55,998' '
   $0 >= start && $0 <= end' < file.log

将打印以该范围内的时间戳开头的行。

相关内容