2

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

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

需要检查的特殊情况

  • 跨越午夜的日期。例如:04172012-115500& 04182012-000200
  • 哪个文件先进来并不重要,等等。

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

这旨在同时在 solaris 和 linux ksh 上运行。提前致谢。

4

4 回答 4

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。

于 2012-04-24T22:45:11.883 回答
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
$
于 2012-04-20T09:13:35.787 回答
0

如果这只是为了好玩,祝你好运:)。如果它是出于实际的实际目的,请参阅我的strptime包装如何使用 ksh(或其他 shell 脚本)获取现在和不同日期(以分钟为单位)之间的差异?,它应该很容易适应。

于 2012-04-24T22:00:27.723 回答
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
于 2015-07-24T17:08:36.180 回答