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


当前回答

对不起,在Solaris系统上没有提到我。 因此,-date开关在Solaris bash上不可用。

我发现我可以得到之前的日期与小技巧的时区。

DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE

其他回答

如果选择的日期格式是'YYYYMM',你可以用正则表达式做一个简单的计算:

echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'

2020年1月,它将返回2011912;-) 但是,这只是一个变通方法,当date没有计算选项和其他日期解释器选项(例如使用perl)不可用时;-)

不是很性感,但可以胜任:

perl -e 'my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 86400);$year += 1900; $mon+= 1; printf ("YESTERDAY: %04d%02d%02d \n", $year, $mon, $mday)'

由“马丁·克莱顿”的答案形成。

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

     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格式了!

试试下面的代码,它也处理DST部分。

if [ $(date +%w) -eq $(date -u +%w) ]; then
  tz=$(( 10#$gmthour - 10#$localhour ))
else
  tz=$(( 24 - 10#$gmthour + 10#$localhour ))
fi
echo $tz
myTime=`TZ=GMT+$tz date +'%Y%m%d'`

何赛义工