#navi(../)
* 月末かどうか確認する方法・dateコマンド [#ecbcb73a]
月末だけ実行したい処理があるなどの場合、月末は28, 29, 30, 31と4種類あります。~
そこで、dateコマンドを利用して月末を調べる方法を以下に記します。
#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
* 関連資料 [#h713e486]
-[[日時の表示フォーマット変更・dateコマンド>逆引きUNIXコマンド/日時の表示フォーマット変更・dateコマンド]]
-[[翌日の日付を取得・dateコマンド>逆引きUNIXコマンド/翌日の日付を取得・dateコマンド]]
-[[前日の日付を取得・dateコマンド>逆引きUNIXコマンド/前日の日付を取得・dateコマンド]]
-[[出力情報に日時情報を付加したい>逆引きUNIXコマンド/出力情報に日時情報を付加したい]]
-[[Nヶ月とN日前の日付を取得・dateコマンド>逆引きUNIXコマンド/Nヶ月とN日前の日付を取得・dateコマンド]]
-[[UNIX時間に変換・UNIX時間を取得する方法>逆引きUNIXコマンド/UNIX時間に変換・UNIX時間を取得する方法]]
-[[マシンの日時を設定・変更する・date, ntpdate>逆引きUNIXコマンド/マシンの日時を設定・変更する・date, ntpdate]]
-[[指定したタイムゾーンのローカルタイムを表示する方法・TZ>逆引きUNIXコマンド/指定したタイムゾーンのローカルタイムを表示する方法・TZ]]
-[[YYYYMMDDを取得する・date>逆引きUNIXコマンド/YYYYMMDDを取得する・date]]
-[[HH:MI:SSを取得する・date>逆引きUNIXコマンド/HH:MI:SSを取得する・date]]
* 月末を判別する方法 [#c0457673]
翌日が1日であれば、本日は月末ですよね。~
これを、dateコマンドで再現してみます。~
以下コマンドで翌日が表示されます。(4つとも同じ動作になります。)
date --date '1 day'
date --date '+1 day'
date -d '1 day'
date -d '+1 day'
これで翌日の日時が表示されます。
実行結果は以下のようになります。
[sakura@centos ~]$ date
2012年 5月 22日 火曜日 11:04:12 JST
[sakura@centos ~]$ date --date '1 day'
2012年 5月 23日 水曜日 11:04:14 JST
[sakura@centos ~]$ date --date '+1 day'
2012年 5月 23日 水曜日 11:04:14 JST
[sakura@centos ~]$ date -d '1 day'
2012年 5月 23日 水曜日 11:04:14 JST
[sakura@centos ~]$ date -d '+1 day'
2012年 5月 23日 水曜日 11:04:14 JST
日付だけを取得したのいので+%dオプションを利用します。~
manコマンドでdateコマンドを確認すると以下の記述があります。
日付フィールド
<省略>
%d 月内通算日数 (01..31)
<省略>
したがって、+%dを利用することにより、翌日の日付のみを取得できます。~
以下のようになります。
date --date '1 day' +%d
実行結果は以下のようになります。
[sakura@centos ~]$ date
2012年 5月 22日 火曜日 11:08:18 JST
[sakura@centos ~]$ date +%d
22
[sakura@centos ~]$ date --date '1 day' +%d
23
* シェルスクリプトに組み込む [#ec681861]
以下のサンプルスクリプトのようにdateコマンドから返却された値が1だった場合、月末となります。
#ref(chk-eom.sh)
#!/bin/bash
nextday=`date --date '1 day' +%d`
if [ $nextday -eq 1 ]; then
echo `date +%Y/%m/%d` is end of the month.
else
echo `date +%Y/%m/%d` is *NOT* end of the month.
fi
実行結果
[sakura@centos ~]$ date
2012年 5月 30日 水曜日 11:16:30 JST
[sakura@centos ~]$ ./chk-eom.sh
2012/05/30 is *NOT* end of the month.
[sakura@centos ~]$ date
2012年 5月 31日 木曜日 11:17:01 JST
[sakura@centos ~]$ ./chk-eom.sh
2012/05/31 is end of the month.
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)