在bash / unix中获取上一个日期

时间:2013-04-16 02:28:27

标签: bash shell unix solaris solaris-10

我希望在unix / shell脚本中获取上一个日期。

我正在使用以下代码

date -d ’1 day ago’ +’%Y/%m/%d’

但是我收到以下错误。

date: illegal option -- d

就我在inetrnet上阅读而言,它基本上意味着我使用的是旧版本的GNU。任何人都可以帮助这个。

更多信息

unix> uname -a

SunOS Server 5.10 Generic_147440-19 sun4v sparc SUNW,Sun-Fire-T200

此外,以下命令会出错。

unix> date --version

date: illegal option -- version
usage:  date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]

12 个答案:

答案 0 :(得分:13)

试试这个:

date --date="yesterday" +%Y/%m/%d

答案 1 :(得分:5)

你可以使用

date -d "30 days ago" +"%d/%m/%Y"

从30天前获取日期,类似地,您可以用x天数替换30

答案 2 :(得分:4)

此处建议的几种解决方案假设系统中存在GNU coreutils。以下内容适用于Solaris:

TZ=GMT+24 date +’%Y/%m/%d’

答案 3 :(得分:4)

dtd="2015-06-19"
yesterday=$( date -d "${dtd} -1 days" +'%Y_%m_%d' )
echo $yesterday;

答案 4 :(得分:3)

使用日期命令获取1天的返回日期:

date -v -1d它会给(当前日期-1)意味着提前1天。

date -v +1d 这将给出(当前日期+1)意味着1天后。

类似下面的代码可以代替d使用,以找出年,月等

y-Year, m-Month w-Week d-Day H-Hour M-Minute
S-Second

答案 5 :(得分:2)

以下脚本将上一个日期打印到targetDate(指定日期或指定日期)

targetDate=2014-06-30
count=1
startDate=$( echo `date -d "${targetDate} -${count} days" +"%Y-%m-%d"`)
echo $startDate

答案 6 :(得分:0)

SunOS附带传统的BSD用户工具,这些工具通常缺乏预期的现代选项。看看你是否可以获得XPG插件(类似于/usr/xpg4/bin/date)或者如果可以的话安装GNU coreutils包。

与此同时,您可能需要编写自己的简单日期处理脚本。网上有很多例子,例如在Perl。例如。 this one

vnix$ perl -MPOSIX=strftime -le 'print strftime("%Y%m", localtime(time-86400))'
201304

(稍微调整一下,如果你与链接后面的那个相比。)

答案 7 :(得分:0)

我已使用以下解决方法来获得所需的解决方案。

timeA=$(date +%Y%m)
sysD=$(date +%d)
print "Initial sysD $sysD">>LogPrint.log
sysD=$((sysD-1))
print "Final sysD $sysD">>LogPrint.log
finalTime=$timeA$sysD

我希望这对那些面临同样问题的人有用。

答案 8 :(得分:0)

$ date '+%m/%d/%Y' --- current date


$ TZ=Etc/GMT+24 date  '+%m/%d/%Y'  -- one dayprevious date

适当使用时区

答案 9 :(得分:0)

试试这个: gdate -d“1天前”+“%Y /%m /%d”

答案 10 :(得分:0)

date -d "yesterday" '+%Y-%m-%d'

答案 11 :(得分:-1)

问题

您使用反引号而不是单引号作为参数。您也可能没有使用支持您正在使用的标志的GNU日期或 date 版本。

解决方案

正确引用你的论点。例如:

$ date -d '1 day ago' +'%Y/%m/%d'
2013/04/14