如何在Bash中打印当前时间前一天的日期?
当前回答
如果你有GNU日期,我理解正确
$ date +%Y:%m:%d -d "yesterday"
2009:11:09
or
$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
其他回答
好吧,这是一个晚的答案,但这似乎是有效的!
YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
echo $YESTERDAY;
如果你有BSD (OSX)日期,你可以这样做:
date -j -v-1d
Wed Dec 14 15:34:14 CET 2011
或者如果你想在任意日期上进行日期计算:
date -j -v-1d -f "%Y-%m-%d" "2011-09-01" "+%Y-%m-%d"
2011-08-31
如果你有GNU日期,我理解正确
$ date +%Y:%m:%d -d "yesterday"
2009:11:09
or
$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
#!/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
简短回答(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格式了!