HP-UX General
1755623 メンバー
3596 オンライン
108836 解決策
新規ポスト

シェルでの日付演算について

 
よしまつ
時折のコントリビューター

シェルでの日付演算について

シェルだけで、システム日付を取得する際に、一日前の日付を簡単に取得する(yyyymmdd)方法はありますでしょうか?

年や月をまたがった場合や、うるう年を考慮した形で取れるのが理想的です。

また、シェルは/bin/shです。

よろしくお願いいたします。
5件の返信5
S_K
頻繁なアドバイザー

シェルでの日付演算について

シェルだけでやってやれないことは無いと思いますが、果たしてやるだけの価値があるかどうか...

僕なら素直にperlでやってしまいますね。

11.00でもperl4が、11i以降ならperl5が標準で付属していることですし。
テレコム担当者
尊敬されているコントリビューター

シェルでの日付演算について

私も K.SakaI さんと同じで perl を使うのが

良いと思います。

Google で で検索すると結構良い

情報がヒットします。
HASI
頻繁なアドバイザー

シェルでの日付演算について

dateの"+"オプションで無理矢理やれば何とか

できそうな気もします。年が4で割れる場合は

うるう年判定をするとか・・・。

例えば・・・

- 毎月に何日あるかを事前に変数にいれる

- 1日でなければそのまま1を引く

- 1日なら、今月の月から1引き、毎月何日か

 変数から引っ張る

- 1/1なら月を12にし、年も1を引く

- 今日が3/1で今年が4割り切れ、

 -> 100で割り切れるなら1日前を2/28

-> 400で割り切れるなら2/29

-> 上記2つに当てはまらなければ2/29
taro
時折のアドバイザー

シェルでの日付演算について

反則技かもしれませんが。。。私は、

#!/bin/sh

TZ=JST+15; export TZ

date "+%Y%m%d"

こんなやり方で実現していたことがあります。

タイムゾーンで騙すというのは、少し気が引ける

のですが、シェルの中だけで解決できるという

利点を選びました。

もし、前日の日付を取得した後に、元に戻したければ、

TZ=JST-9; export TZ

としておけば、問題ないでしょう。

閏年とか月またがりとかは気にしないでいいし。

ダメですか?
?????_218
頻繁なアドバイザー

シェルでの日付演算について

私もHASIさんの紹介されている方法で、Y2K対策かなんか

の為に、書いた事ありますが、50行程度で記述できた

筈です。

実は、やってみると簡単です。

尚、全ての月の月末を変数に用意する必要は無く、月末日

は、31日、30日、2月の月末日の3種類しかないので、

caseを利用して1日の月から、前月の月末日を求めれば

シンプルな記述となります。