如何在Bash中打印当前时间前一天的日期?


当前回答

#!/bin/bash
OFFSET=1;
eval `date "+day=%d; month=%m; year=%Y"`
# Subtract offset from day, if it goes below one use 'cal'
# to determine the number of days in the previous month.
day=`expr $day - $OFFSET`
if [ $day -le 0 ] ;then
month=`expr $month - 1`
if [ $month -eq 0 ] ;then
year=`expr $year - 1`
month=12
fi
set `cal $month $year`
xday=${$#}
day=`expr $xday + $day`
fi
echo $year-$month-$day

其他回答

高级bash脚本编写指南

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

有关日期格式的详细信息,请参阅日期手册页

date --date='-1 day'

好吧,这是一个晚的答案,但这似乎是有效的!

     YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
     echo $YESTERDAY;

简短回答(GNU格式):

date +%Y-%m-%d -d "-2 day"

如果你正在使用OSX,但你需要创建GNU兼容,首先安装coreutils

brew install coreutils

然后编辑您的个人资料:

#gnu coreutils first
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

重新启动你的终端,现在你就可以使用GNU格式了!

也许改用Perl ?

perl -e 'print scalar localtime( time - 86400 ) . "\n";'

或者使用nawk, (ab)使用/usr/bin/adb:

nawk 'BEGIN{printf "0t%d=Y\n", srand()-86400}' | adb

我也发现了这个…疯了!

/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb
#!/bin/bash
OFFSET=1;
eval `date "+day=%d; month=%m; year=%Y"`
# Subtract offset from day, if it goes below one use 'cal'
# to determine the number of days in the previous month.
day=`expr $day - $OFFSET`
if [ $day -le 0 ] ;then
month=`expr $month - 1`
if [ $month -eq 0 ] ;then
year=`expr $year - 1`
month=12
fi
set `cal $month $year`
xday=${$#}
day=`expr $xday + $day`
fi
echo $year-$month-$day