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

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

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

date:
29 Aug 2018 21:56:01

result:
29 Aug 2018 21:51:02

我尝试在互联网/论坛上搜索,但大多数都涉及使用该-d选项,而我所拥有的不支持该-d选项。

这个可以在 Bash 上运行,但我需要一些可以在 ksh 上运行的东西。

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

答案1

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

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

bash仅支持 Unix 纪元时间(-1现在,尽管使用最新版本您也可以获得现在缺少参数)而 ksh93 支持复杂的相对关系(包括上面的英语、crontab、at ISO 8601:2004 持续时间)或绝对时间规范(请参阅测试数据在一些例子的源代码中)。

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

$ printf '%(%c)T\n' '#0'
Thu Jan  1 00:00:00 1970

(虽然在这里,它恰好给出了错误的时间,因为英国时区的纪元时间 0 是凌晨 1 点

答案2

你可以使用perl

echo $(( $(printf "%(%s)T") - 5 * 60 )) | perl -lne 'print scalar localtime $_'

或者在纯 Perl 中:

perl -le 'print scalar localtime(time()-5*60)'

格式化使用strftime()

perl -MPOSIX=strftime -le 'print strftime("%d %h %Y %H:%M:%S", localtime(time()-5*60))'

相关内容