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

如何在unix中计算给定日期之前的日期?,unix,shell,scripting,Unix,Shell,Scripting,我有两个变量:X和Y X的值将是以mmddyy格式给出的日期 我想计算该日期之前的日期,并以yyyymmdd格式返回 让我给你举个例子。当X=“091509”(mmddyy格式)时,Y应为“20090914”(yyyymmdd格式)日期-d“昨天” 如果您想以自定义格式检索日期,只需输入一些格式字符串 ~$ date -d "2009-09-15 -1 day" +%Y%m%d 20090914 至于转换,您可以使用bash子字符串提取(当然,假设您使用bash)。这还假设您的输入是一致的和“

我有两个变量:X和Y

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

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

日期-d“昨天”

如果您想以自定义格式检索日期,只需输入一些格式字符串

~$ date -d "2009-09-15 -1 day" +%Y%m%d
20090914
至于转换,您可以使用bash子字符串提取(当然,假设您使用bash)。这还假设您的输入是一致的和“安全的”


请参见

我喜欢Tcl的日期算法,尽管它对于shell one行程序来说很笨重。使用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)
由于-d选项在MacOS X或FreeBSD上不存在,下面是它们的答案

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

date -v -1d

特别是对于您的问题,您需要使用-j和-f标志来使用特定的日期

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

Shell脚本还是别的什么?Shell脚本…………我不想要昨天的日期…………我想要的是比“x”的值少一天的日期。这并不能解决将$x转换为该值的问题,但是,是的,让date命令计算出030100之前的日期(例如)。@pavium。。。。没错。我现在添加了一种实现这种转换的方法。谢谢你指出!这将在GNU日期起作用(例如在Linux上),但不幸的是
-d
不可移植。
date -v -1d
date -v -1d -j -f %m%d%y 091509 +%Y%m%d