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

それらのどれも正しい出力を与えませんでした。誰でも望ましい結果を得るための正しい方法を教えてください。

OS バージョン : SunOS 5.10

4

4 に答える 4

4

あなたはおそらくpythonを持っています。

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

ただし、日付が-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

ksh88Solaris (バージョン 10 の時点) は、非常に古いをデフォルトとしてまだ出荷していますkshksh93で(上記の構文をサポートする)を見つけることができるはずです/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
于 2013-06-30T23:27:54.380 に答える
2

問題のシステムは、おそらく Solaris です。これは Solaris で動作します:

TZ=GMT+24+<YOUR_LOCAL_TIME_ADJUSTMENT> date +'%Y%m%d'

編集: DSTを考慮するには(DSTを使用したGMT + 11 / GMT + 10の例):

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 に答える