ksh - 从当前时间减去 5 分钟

Wal*_*idt 3 scripting ksh shell-script timestamps

我需要得到命令的日期和时间date减去 5 分钟。

date:
29 Aug 2018 21:56:01

result:
29 Aug 2018 21:51:02
Run Code Online (Sandbox Code Playgroud)

我试图在互联网/论坛上进行搜索,但其中大部分都涉及使用该-d选项,而我所拥有的不支持该-d选项。

这个适用于 Bash,但我需要一些适用于 ksh 的东西。

$ printf "%(%d %h %Y %H:%M:%S)T\n" $(( $(printf "%(%s)T") - 5 * 60 ))
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 7

bash实际上%(...)T从 ksh93复制了格式,但只是一小部分。

这在 ksh93 中要强大得多。

$ date; printf '%(%c)T\n' 'exactly five minutes ago'
Mon  3 Sep 08:08:32 BST 2018
Mon Sep  3 08:03:32 2018
Run Code Online (Sandbox Code Playgroud)

bash只支持Unix纪元倍(或-1现在,虽然最近的版本也可以得到现在用缺少参数),而ksh93的支持复杂的亲属(包括英语像上面的crontab,at,ISO 8601:2004点的持续时间)或绝对时间规范(见一些示例的源中的测试数据)。

在 中ksh93,如果要传递纪元时间,请使用#前缀:

$ printf '%(%c)T\n' '#0'
Thu Jan  1 00:00:00 1970
Run Code Online (Sandbox Code Playgroud)

(虽然在这里,它碰巧在英国时区给了我不正确的时间,其中纪元时间 0 是凌晨 1 点