使用 BASH 验证 Unix 时间戳

使用 BASH 验证 Unix 时间戳

我的 google-fu 失败了,所以我希望这里有人能给我指出正确的方向。我正在做一些数据验证工作,我怀疑系统正在以 unix 纪元格式记录一些无效日期(自纪元以来的秒数)。 bash 中是否有一种简单的方法,给定看起来像1357853083(自 unix 纪元以来的秒数)的数据来确定它是否是有效的 unix 时间戳?理想情况下,我正在寻找无法转换为人类可读日期的时间戳以及可能呈现为大于当前日期的未来日期的时间戳。

我已经编译了这个怪物,它将事物转换为人类可读的日期,但我不知道如何让它找到无效的日期。

$ grep "delimiter" * | grep -v "delimiter2" | awk -F"," '{print $2}' | awk -F":" '{print $2}' | awk -F"*" '{print $1}' | awk '{printf("%s", strftime("%Y.%m.%d ",$1)); printf("%s", strftime("%H:%M:%S \n",$1))}' | sort -V

答案1

所以看来您想做两个测试。

  1. 检查有效的纪元时间编号,该编号介于 -2147483648 到 2147483647 或 +-9.22337203685478E18 之间,具体取决于您的系统使用 32 位还是 64 位时间。
  2. 您想要检查是否有小于今天日期的数字。

因此,结合这两个测试,您正在寻找 -2147483648 到今天的纪元时间范围内的数字。下面的代码应该可以完成您想要的操作,尽管我会将下限提高到合理的纪元时间日期,例如安装计算机或编译操作系统的日期。我随意将下限设置为 0 秒或 1/1/1970。

#$i stores the value being tested
#returns failed if it fails validation, otherwise it returns passed
if [ $i -le 0 -o $i -gt `date +%s` ]; then echo "failed"; else echo "passed"; fi;

相关内容