您需要使用date
兩次,一次將字符串輸入轉換爲'epoch time'(自Epoch以來的秒數 - 又名1970-01-01 00:00:00 +00:00),而一旦一個劃時代的時間轉換爲您選擇的輸出格式:
rdate="9/14/16"
epoch_time=$(date -j -f '%m/%d/%y' "$rdate" +'%s')
date -j -vmon -r "$epoch_time"
date -j -vfri -r "$epoch_time" +'%w'
這給我的輸出:
Mon Sep 12 10:14:44 PDT 2016
5
注意,週五是一週的第5天,所以輸出是正確的。當您指定-v
dow
似乎有點沒有實際意義時使用%w
;你知道輸出將是5.但你也可以使用你需要的任何其他格式字符。
請注意,時間部分默認爲當前時間。你可以添加00:00:00
轉換後的日期和%H:%M:%S
的轉換格式(-f
參數)午夜工作等
你可以把它組合到一個命令行:
$ date -j -vmon -r $(date -j -f '%m/%d/%y %H:%M:%S' "$rdate 00:00:00" +'%s') +'%Y-%m-%d %H:%M:%S %w %s'
2016-09-12 00:00:00 1 1473663600
$
在最後一個例子在Mac OS X上date
的手冊頁提到了%s
格式說明符,這是實現此功能的關鍵。那麼,並使用date
兩次。
注意,該男子頁給出的提綱:
date [-ju] [-r seconds] [-v [+|-]val[ymwdHMS]] ... [+output_fmt]
date [-jnu] [[[mm]dd]HH]MM[[cc]yy][.ss]
date [-jnu] -f input_fmt new_date [+output_fmt]
date [-d dst] [-t minutes_west]
的「使用」的消息是不太有幫助:
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
用法消息並不表明你不能使用-f
-r
或-v
,而手冊很清楚你不能。
測試:Mac OS X 10.11.6 El Capitan
您不能;沒有日期對象,只有由'date'寫入標準輸出的字符串。 – chepner
謝謝@chepner。我剛剛編輯我的文章詳細解釋我的要求。 –
您可能需要比bash更強大的語言,例如'python'。 GNU版本的'awk'('gawk')有一些日期時間功能,但我認爲他們會很難做到你需要的。 – cdarke