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)
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 点)