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


当前回答

支持DST的解决方案:

通过操作时区可以将时钟调整几个小时。由于是夏时制,24小时前可以是今天也可以是前天。

你确定昨天是二三十小时前。哪一个?最近的一次不是今天。

echo -e "$(TZ=GMT+30 date +%Y-%m-%d)\n$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1

echo命令中使用的-e参数在bash中是必需的,但在ksh中无效。在ksh中,您可以使用相同的命令,不带-e标志。

当您的脚本将在不同的环境中使用时,您可以使用#!/bin/ksh或#!/bin/bash你也可以用换行符替换\n:

echo "$(TZ=GMT+30 date +%Y-%m-%d)
$(TZ=GMT+20 date +%Y-%m-%d)" | grep -v $(date +%Y-%m-%d) | tail -1

其他回答

date +%Y:%m:%d|awk -vFS=":" -vOFS=":" '{$3=$3-1;print}'
2009:11:9

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

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)'

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

date --date='-1 day'

高级bash脚本编写指南

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

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

date --date='-1 day'

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

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

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