【问题标题】:Find Difference in timestamps in seconds以秒为单位查找时间戳的差异
【发布时间】:2012-05-01 06:16:49
【问题描述】:

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

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

需要检查的特殊情况

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

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

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

【问题讨论】:

  • python 可用吗?对于纯 ksh 实现,您可以找到一些灵感here
  • 对不起,我正在寻找一个 shell 脚本解决方案。
  • 为什么你不能使用任何其他语言?
  • 主要用于教育目的 - 我想看看如何在 shell 脚本中完成。此外,能够将其集成到更大的现有 shell 脚本中。
  • 您的目标是什么 ksh 版本? Gnu/Linux 发行版可能有 pdksh 或 ksh93。 Solaris 10 和更早版本具有 ksh88 和 dtksh。 Solaris 11 有 ksh93。

标签: linux shell scripting solaris ksh


【解决方案1】:

作为初学者(来自我上面提供的链接):

#! /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
$

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这个解决方案使用 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。

      【讨论】:

        【解决方案4】:

        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
        

        【讨论】:

          猜你喜欢
          • 2012-12-10
          • 1970-01-01
          • 2019-01-27
          • 2014-05-01
          • 1970-01-01
          • 2019-01-28
          • 1970-01-01
          • 2018-03-14
          • 1970-01-01
          相关资源
          最近更新 更多