Linux下的date命令究竟可以幹什麼

阿債發表於2010-12-06

因為有個Bash指令碼,想根據使用者給的日期引數(yyyymmdd格式),得到這個日期的前一天的表示。首先想到的就是date命令,網上搜了一大把,其實多數都是互相抄的,date基本用法原本就會,不能用來解決我的問題。

先說不用date命令的方法:

不嫌麻煩就多用幾個判斷,解決每月開頭、每年開頭減去一天的問題,最麻煩的是倒推到上個月最後一天,這一天究竟是28、29還是30、31,還得寫個函式。

再說date的基本用法:

date +%Y%m%d  這是格式化輸出,其他語言多數叫做strftime()

date -d “2 days ago” +%s  -d可以輸入一個日期,不過大多是相對於現在時間,+%s是輸出時間戳。

date -d “2010-12-06” +%F  -d可以接受ISO格式yyyy-mm-ddTHH:MM:SSZ,也可以接受日期的一些英文格式(月份英文縮寫)  %F就是%Y%m%d

接著搜到的我不知道的格式用法,當然對我的問題沒有幫助:

格式字元中加-可以去掉前面的0,加_把前面的0變成一個空格,舉例:date +%-Y%-m%-d 是 2010-12-6 (6前面的0去掉了)  date +%_Y%_m%_d 是 2010-12- 6  (6前面有一個空格)

最後是謎底,date可以接受的特殊-d引數:

date -d “1970-01-01 UTC 1291622912 seconds” +%s  在前面的日期上面加上這麼多秒作為輸入。在我的指令碼中這麼用的:

date=$1   #從指令碼的第一個引數得到輸入日期(格式yyyy-mm-dd或者yyyymmdd)
datets=`date -d "$1" +%s` #求出這個日期的時間戳,注意兩邊的是反引號,Tab鍵上面那個,下同
yesterts=`expr $datets - 86400`  #往前推一天
yesterday=`date -d "1970-01-01 UTC $yesterts seconds" +%Y%m%d` #把它變做輸出

我從那裡知道的,既不是date的help命令,也不是man文件。而是一個網頁 [網址找不著了]


相關文章