Shell-Script

ksh - 從目前時間減去 5 分鐘

  • September 3, 2018

我需要將命令的日期和時間date減去 5 分鐘。

date:
29 Aug 2018 21:56:01

result:
29 Aug 2018 21:51:02

我嘗試在 Internet/論壇上進行搜尋,但其中大部分涉及使用該-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,儘管在最近的版本中,您也可以在缺少參數的情況下獲得now),而 ksh93 支持複雜的相對時間(包括上面的英語、crontab、、ISO 8601:2004 持續時間)或絕對時間規範(參見一些範例的源中的測試數據)。 at

ksh93中,如果要傳遞紀元時間,請使用#前綴:

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

(雖然在這裡,它恰好在英國時區為我提供了不正確的時間,其中紀元時間 0 是凌晨 1 點

引用自:https://unix.stackexchange.com/questions/466487