UNIX /シェルスクリプトで前の日付を取得しようとしています。
私は次のコードを使用しています
date -d ’1 day ago’ +’%Y/%m/%d’
しかし、次のエラーが発生します。
date: illegal option -- d
私がinetrnetで読んだ限り、それは基本的に私が古いバージョンのGNUを使用していることを意味します。誰でもこれを手伝ってくれませんか。
詳細情報
unix> uname -a
SunOS Server 5.10 Generic_147440-19 Sun4v sparc SUNW,Sun-Fire-T200
また、以下のコマンドはエラーを出します。
unix> date --version
date: illegal option -- version
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
ここで提案されているいくつかの解決策は、GNU coreutils
システムに存在します。 Solarisでは以下が機能するはずです。
TZ=GMT+24 date +’%Y/%m/%d’
これを試して:
date --date="yesterday" +%Y/%m/%d
dtd="2015-06-19"
yesterday=$( date -d "${dtd} -1 days" +'%Y_%m_%d' )
echo $yesterday;
あなたが使用することができます
date -d "30 days ago" +"%d/%m/%Y"
30日前の日付を取得するには、同様に30をx日数に置き換えることができます
Dateコマンドを使用して1日前の日付を取得するには、次のようにします。
date -v -1d
(現在の日付-1)は1日前を意味します。
date -v +1d
これにより、(現在の日付+1)は1日後を意味します。
同様に、以下のコードをd
の代わりに使用して、年、月などを調べることができます。
y-Year, m-Month w-Week d-Day H-Hour M-Minute
S-Second
次のスクリプトは、前の日付をtargetDate
(指定された日付または指定された日付)に出力します
targetDate=2014-06-30
count=1
startDate=$( echo `date -d "${targetDate} -${count} days" +"%Y-%m-%d"`)
echo $startDate
SunOSには、期待される最新のオプションが不足していることが多いレガシーBSDユーザーランドツールが付属しています。 XPGアドオンを入手できるかどうかを確認してください( /usr/xpg4/bin/date
)または、可能であればGNU coreutils
パッケージをインストールします。
それまでの間、独自の簡単な日付処理スクリプトを作成する必要があるかもしれません。ネット上には多くの例があります。 Perlで。例えば。 これ :
vnix$ Perl -MPOSIX=strftime -le 'print strftime("%Y%m", localtime(time-86400))'
201304
(リンクの背後にあるものと比較すると、わずかに適合しています。)
$ date '+%m/%d/%Y' --- current date
$ TZ=Etc/GMT+24 date '+%m/%d/%Y' -- one dayprevious date
タイムゾーンを適切に使用する
次の回避策を使用して、必要な解決策を見つけました。
timeA=$(date +%Y%m)
sysD=$(date +%d)
print "Initial sysD $sysD">>LogPrint.log
sysD=$((sysD-1))
print "Final sysD $sysD">>LogPrint.log
finalTime=$timeA$sysD
これが私と同じ問題に直面している人々に役立つことを願っています。
これを試してください:gdate -d "1日前" + "%Y /%m /%d"