#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)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS