2009-09-15 93 views
2

我有兩個變量:X和Y如何計算unix中給定日期之前的日期?

X的值將日期格式MMDDYY 給出我想要計算前是迄今爲止日期已將其歸還格式爲yyyymmdd

讓我給你舉個例子。當X = 「091509」(MMDDYY格式)Y應爲 「20090914」(YYYYMMDD格式)

+0

Shell腳本還是別的東西? – pavium 2009-09-15 05:49:09

+0

shell腳本............... – musicking123 2009-09-15 05:49:48

+0

我不希望昨天的日期.........我想要一天的日期少於「x」的價值 – musicking123 2009-09-15 05:52:50

回答

5
~$ date -d "20090101 -1 day" 
Wed Dec 31 00:00:00 CET 2008 

如果你想要檢索的日期一個自定義格式,你只需要輸入一些格式字符串。

~$ date -d "2009-09-15 -1 day" +%Y%m%d 
20090914 

至於你的轉換,你可以使用bash子串提取(假設你使用bash當然)。這也假定你的輸入是一致的和「安全的」。

X="091509" 
Y=`date -d "${X:4:2}${X:0:2}${X:2:2} -1 day" +%Y%m%d` 
echo $Y 

http://www.walkernews.net/2007/06/03/date-arithmetic-in-linux-shell-scripts/

+0

這並沒有解決轉換你的$ X的工作在這個問題,但是,讓日期命令工作出來的是前一天030100(例如)。 – pavium 2009-09-15 06:26:57

+0

@pavium ....對吧。我已經添加了一種做這種轉換的方法。感謝您指出! – 2009-09-15 06:36:51

+0

這將在GNU日期(例如在Linux上)工作,但不幸的是'-d'不是可移植的。 – mark4o 2009-09-15 14:44:54

-1

日期-d 「昨天」

+0

我不要想昨天的日期.............. – musicking123 2009-09-15 06:06:11

0

我喜歡的Tcl的日期計算,即使它是笨重的殼單行。使用Tcl 8.5:

x=091509 
y=$(printf 'puts [clock format [clock add [clock scan "%s" -format "%%m%%d%%y"] -1 day] -format "%%Y%%m%%d"]' "$x" | tclsh) 
0

由於-d選項並不在MacOS X或FreeBSD的存在,這裏是他們

答案相關的日期檢索到當前時間

date -v -1d 

對於您的問題,您需要-j-f使用特定日期的標誌

date -v -1d -j -f %m%d%y 091509 +%Y%m%d 
相關問題