web-dev-qa-db-ja.com

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 ))
3
WaldenSchmidt

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))'
_
2
chaos

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時であったイギリスのタイムゾーンで誤った時間を与えてしまいます

7