如何在unix中计算给定日期之前的日期?

时间:2009-09-15 05:33:27

标签: unix shell scripting

我有两个变量:X和Y。

X的值将是以 mmddyy 格式给出的日期 我想计算日期日期 yyyymmdd 格式返回

让我举个例子。当X =“091509”( mmddyy 格式)时,Y应为“20090914”( yyyymmdd 格式)

4 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

我喜欢Tcl的日期算术,尽管它对于shell单行很笨拙。使用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)

答案 2 :(得分:0)

由于 -d 选项在MacOS X或FreeBSD上不存在,所以这是他们的答案

检索相对于当前时间的日期

date -v -1d

特别针对您的问题,您需要 -j -f 标志才能使用特定日期

date -v -1d -j -f %m%d%y 091509 +%Y%m%d

答案 3 :(得分:-1)

date -d“昨天”