我想使用bash找出过去的日历日。
我试过以下
今天的日期:
20130701
预期输出:20130630
代码1:
myTime=`TZ=$TZ+24 date +'%Y%m%d'`
echo $myTime
输出
20130629
代码2:
timeB=$(date +%Y%m)
sysD=$(date +%d)
sysD=$((sysD-1))
echo $timeB$sysD
输出
2013070
Code3:
yest=$(date --date="yesterday")
echo "$yest"
输出
date: illegal option -- date=yesterday
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
Code4:
$ date +%Y%m%d -d "yesterday"
输出
20130701
他们都没有给出正确的输出。任何人都可以告诉我正确的方法来获得理想的结果。
操作系统版本:SunOS 5.10
答案 0 :(得分:4)
你可能有python。
python -c "import datetime; print datetime.date.today () - datetime.timedelta (days=1)"
但是,如果date支持-d
标志,那么这将是我首选的解决方案。
答案 1 :(得分:3)
根据用法消息,我不认为您使用的是OS X.如果您使用的是OS X,则可以使用-v
标志,但仅限于当前日期/时间:< / p>
$ date +%Y%m%d
20130630
$ date -v-1d +%Y%m%d
20130629
如果您有ksh
可用,则可以使用它。我不确定可用的完整语法,所以我不知道你是否可以指定基准日期,但你可以相对于今天这样做:
$ ksh -c 'printf "%(%Y%m%d)T\n" yesterday'
20130629
Solaris(从版本10开始)仍然附带可疑的旧ksh88
作为其默认ksh
。您应该能够在ksh93
中找到/usr/dt/bin/ksh
(支持上述语法):
$ /usr/dt/bin/ksh -c 'printf "%(%Y%m%d)T\n" yesterday'
20130629
如果您有tclsh
可用,则可以使用它:
$ echo 'puts [clock format [clock scan "yesterday"] -format %Y%m%d]' | tclsh
20130629
$ echo 'puts [clock format [clock scan "20130701 - 1 day"] -format %Y%m%d]' | tclsh
20130630
您已经说--date
不起作用,但为了完整性:在使用GNU版date
的系统上,您可以使用--date
或-d
:
$ date +%Y%m%d
20130630
$ date +%Y%m%d -d yesterday
20130629
$ date +%Y%m%d -d '-1 days'
20130629
$ date +%Y%m%d -d '20130701 - 1 day'
20130630
答案 2 :(得分:2)
有问题的系统很可能是Solaris。这适用于Solaris:
TZ=GMT+24+<YOUR_LOCAL_TIME_ADJUSTMENT> date +'%Y%m%d'
修改强> 考虑DST(GMT + 11 / GMT + 10与DST的例子):
actualdate=$(date +'%Y%m%d%H%M')
nondstdate=$(TZ=GMT+11 date +'%Y%m%d%H%M')
if [ $actualdate = $nondstdate ] ; then
TZ=GMT+35 date +'%Y%m%d'
else
TZ=GMT+34 date +'%Y%m%d'
fi
编辑2: 随机TZ和DST的防弹:
gmthour=$(date -u +%k)
localhour=$(date +%k)
tz=$(( gmthour - localhour ))
echo Your Timezone is $tz
yesterdaytz=$(( 24 + tz ))
echo the offset for yesterday is $yesterdaytz
TZ=GMT+$yesterdaytz date +'%Y%m%d'