如何在Bash中打印当前时间之前一天的日期?
--date
或-d
选项仅在GNU可用日期
如何在Bash中打印当前时间之前一天的日期?
--date
或-d
选项仅在GNU可用日期
Answers:
如果您有GNU日期并且我正确理解了您
$ date +%Y:%m:%d -d "yesterday"
2009:11:09
要么
$ date +%Y:%m:%d -d "1 day ago"
2009:11:09
date -v-1d
在OSX(减号)上,-v+1d
(加号)
date_days_past () { days_past=${1:-0}; if ! date -v-${days_past}d +%Y%m%d 2>/dev/null; then date --date="-${days_past} day" +%Y%m%d; fi }
date --date='-1 day'
date: illegal option -- -
date
提供的GNU版本coreutils
,以使该语法在macOS上有效。如果您使用的是Homebrew,则可以通过进行安装brew install coreutils
,此后您应该可以通过该gdate
命令使用GNU date 。参见:topbug.net/blog/2013/04/14/…–
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
很抱歉在Solaris系统上没有提到I。因此,-date开关在Solaris bash上不可用。
我发现我可以在时区上获得一些技巧来获取先前的日期。
DATE=`TZ=MYT+16 date +%Y-%m-%d_%r`
echo $DATE
bash $(TZ=America/New_York date +%Y-%m-%d)
#!/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
1 July , 2013
,正在打印的结果是2013-6-1347
,而期望的结果是2013-6-30
echo $(cal $month $year)|tr ' ' '\n'|tail -n 1
”
date -d "yesterday" '+%Y-%m-%d'
要么
date=$(date -d "yesterday" '+%Y-%m-%d')
echo $date
date: illegal option: -d
Solaris上。对于非GNU Solaris平台的问题,您的答案依赖于POSIX标准date
实用程序的非便携式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'`
Courtsey Ansgar Wiechers
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