我需要获取命令的日期和时间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
实际上复制了%(...)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
bash
仅支持 Unix 纪元时间(-1
或现在,尽管使用最新版本您也可以获得现在缺少参数)而 ksh93 支持复杂的相对关系(包括上面的英语、crontab、at
ISO 8601:2004 持续时间)或绝对时间规范(请参阅测试数据在一些例子的源代码中)。
在 中ksh93
,如果您想传递纪元时间,请使用前缀#
:
$ printf '%(%c)T\n' '#0'
Thu Jan 1 00:00:00 1970
答案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))'