如何在Bash中打印当前时间前一天的日期?
当前回答
如果你有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
其他回答
如果你有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
如果选择的日期格式是'YYYYMM',你可以用正则表达式做一个简单的计算:
echo $(($(date +"%Y%m") - 1)) | sed -e 's/99$/12/'
2020年1月,它将返回2011912;-) 但是,这只是一个变通方法,当date没有计算选项和其他日期解释器选项(例如使用perl)不可用时;-)
对不起,在Solaris系统上没有提到我。 因此,-date开关在Solaris bash上不可用。
我发现我可以得到之前的日期与小技巧的时区。
DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
也许改用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
MAC OSX
昨天的日期:
date -v-1d +%F
其中1d定义今天减去1天。同样的,
date -v-1w +%F -表示前一周的日期
date -v-1m +%F -表示上个月的日期
如果你有gnu日期,
date --date="1 day ago"
更多信息:https://www.cyberciti.biz/tips/linux-unix-get-yesterdays-tomorrows-date.html