4

我想使用 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

代码3:

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]

代码4:

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

输出

20130701

他们都没有给出正确的输出。谁能告诉我获得所需结果的正确方法。

操作系统版本:SunOS 5.10

4

4 回答 4

4

你可能有python。

python -c "import datetime; print datetime.date.today () - datetime.timedelta (days=1)"

不过,如果 date 支持该-d标志,那么这将是我的首选解决方案。

于 2013-06-30T23:23:13.320 回答
3

根据使用信息,我认为您不在 OS X 上。如果您在 OS X 上,则可以使用该-v标志,但只能相对于当前日期/时间:

$ 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,您可以使用--dateor -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
于 2013-06-30T23:27:54.380 回答
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'
于 2013-06-30T23:25:17.940 回答
0

GNU日期

$ date "+%Y%m%d" -d 'now -1 day'
20130629
于 2013-06-30T23:18:10.417 回答