コマンドの日時を取得する必要があります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 ))
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))'
_
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
fornow、ただし最近のバージョンではnowも取得できます引数が欠落している場合)ksh93は、複雑な相対(上記のような英語、crontab、at
、ISO 8601:2004期間を含む)または絶対時間指定(ソースの テストデータ を参照)をサポートしますいくつかの例については)。
ksh93
、エポックタイムを渡す場合は、#
接頭辞:
$ printf '%(%c)T\n' '#0'
Thu Jan 1 00:00:00 1970
(ただし、ここでは たまたま、エポック時間0が午前1時であったイギリスのタイムゾーンで誤った時間を与えてしまいます )