如何在Bash中打印当前时间前一天的日期?
答案 0 :(得分:245)
如果您有GNU日期并且我理解正确
$ date +%Y:%m:%d -d "yesterday"
2009:11:09
或
$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
答案 1 :(得分:47)
如果您有BSD(OSX)date
,您可以这样做:
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
答案 2 :(得分:40)
date --date='-1 day'
答案 3 :(得分:10)
MAC OSX
昨天的日期:
date -v-1d +%F
其中 1d 定义当前日减去1天。类似地,
日期-v-1w +%F - 上周的日期
日期-v-1m +%F - 上个月的日期
如果你有GNU日期,
date --date="1 day ago"
更多信息:https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html
答案 4 :(得分:7)
这是一个迟到的答案,但这似乎有效!!
YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`;
echo $YESTERDAY;
答案 5 :(得分:5)
答案 6 :(得分:3)
抱歉,在Solaris系统上没有提到我。 因此,Solaris bash上没有-date开关。
我发现我可以通过时区上的小技巧获得上一个日期。
DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
答案 7 :(得分:3)
或许使用Perl?
perl -e 'print scalar localtime( time - 86400 ) . "\n";'
或者,使用nawk和(ab)使用/ usr / bin / adb:
nawk 'BEGIN{printf "0t%d=Y\n", srand()-86400}' | adb
this也来了......疯了!
/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb
答案 8 :(得分:1)
date --date='-1 day'
date --date='-1 day'
答案 9 :(得分:1)
yesterday=`date -d "-1 day" %F`
将昨天的日期以YYYY-MM-DD格式放入变量$yesterday
。
答案 10 :(得分:1)
#!/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
答案 11 :(得分:1)
如果选择的日期格式为“ YYYYMM”,则可以使用正则表达式进行简单的计算:
echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'
在2020年1月它将返回201912 ;-) 但是,这只是一种解决方法,当日期没有计算选项并且其他日期解释器选项(例如,使用perl)不可用时;-)
答案 12 :(得分:1)
date -d "yesterday" '+%Y-%m-%d'
或
date=$(date -d "yesterday" '+%Y-%m-%d')
echo $date
答案 13 :(得分:0)
尝试下面的代码,它也会处理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'`
Courtsey Ansgar Wiechers
答案 14 :(得分:0)
DST感知解决方案:
操作时区可以在几个小时内更改时钟。由于夏令时,24小时前可以是今天或前天。
你确定昨天是20或30小时前。哪一个?嗯,最近的一个不是今天。
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
bash需要echo命令中使用的-e参数,但不能与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
答案 15 :(得分:-1)
date +%Y:%m:%d|awk -vFS=":" -vOFS=":" '{$3=$3-1;print}'
2009:11:9
答案 16 :(得分:-1)
不是很性感但是可以做这个工作:
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)'
来自" martin clayton"答案。