以秒为单位查找时间戳的差异

时间:2012-04-19 16:59:13

标签: linux shell scripting solaris ksh

我有2个文件的时间戳格式为MMDDYYYY-HHMMSS。 例如。 04192012-00062304192012-000854

我需要能够在2秒内找到2之间的差异。

要检查的特殊情况

  • 跨越午夜的日期。例如:04172012-115500& 04182012-000200
  • 首先进入哪个文件无关紧要等等。

我正在运行ksh而无法访问date -d标志。任何人都可以指出我如何shell脚本这个正确的方向? (它将成为更大的shell脚本的一部分,所以请不要使用其他语言)

这适用于solaris和linux ksh。提前谢谢。

4 个答案:

答案 0 :(得分:0)

作为首发(来自我上面提供的链接):

#! /usr/bin/ksh

echo enter first time stamp
read TIME1
echo enter second time stamp
read TIME2
H1=${TIME1%:+([0-9])}
M1=${TIME1#+([0-9]):}
H2=${TIME2%:+([0-9])}
M2=${TIME2#+([0-9]):}
H1=${H1#0}
M1=${M1#0}
H2=${H2#0}
M2=${M2#0}
((MAM1=H1*60+M1))
((MAM2=H2*60+M2))
((MAM1>MAM2)) && ((MAM2=MAM2+1440))
((diff=MAM2-MAM1))
echo diff = $diff

exit 0
$ ./timestamp
enter first time stamp
17:30
enter second time stamp
18:05
diff = 35
$ ./timestamp
enter first time stamp
23:59
enter second time stamp
00:01
diff = 2
$

答案 1 :(得分:0)

如果这只是为了好玩,祝你好运:)。如果它是出于实际目的,请参阅How to get the difference between now and a different date (in minutes) using ksh (or another shell script)?处的strptime包装器,它应该很容易适应。

答案 2 :(得分:0)

此解决方案使用gnu-date和bashisms,因为我不知道ksh。

d1=04192012-000623
dd1="${d1:4:4}/${d1:0:2}/${d1:2:2} ${d1:9:2}:${d1:11:2}:${d1:13:2}"
d1=04192012-000854
dd2="${d1:4:4}/${d1:0:2}/${d1:2:2} ${d1:9:2}:${d1:11:2}:${d1:13:2}"
echo $(($(date -d "$dd1" +%s) - $(date -d "$dd2" +%s)))

也许$ {var:from:len}在ksh中不可用于从字符串中剪切部分,然后你必须用其他东西替换它,也许是sed。

答案 3 :(得分:0)

stat -c后跟以下

之一
   %X     time of last access, seconds since Epoch

   %Y     time of last data modification, seconds since Epoch

   %Z     time of last status change, seconds since Epoch