Linux で日時フォーマット(書式)の変更及び日付の加算・減算を行う

コマンドラインやシェルスクリプト内で日付フォーマットの変更や、日付の加算・減算が必要な場面は多々ありますので説明します。

デフォルトの日時表示形式

通常は以下のように date コマンドだけを叩くと次のような表記になります。
$ # 日本語表記
$ export LANG=ja_JP.UTF-8
$ date
2017年  9月 21日 木曜日 08:38:18 JST

$ # 英語表記
$ LANG=C date
Thu Sep 21 08:48:51 JST 2017




日時フォーマットの変更

まず以下が年月日を YYYY/MM/DD 形式(年/月/日)で表示する方法です。
$ date +%Y/%m/%d
2017/09/21
次に YYYY/MM/DD HH:mm:SS 形式(年/月/日 時:分:秒)で表示する方法です。
$ date '+%Y/%m/%d %H:%M:%S'
2017/09/21 08:42:47
次に YYYY/MM/DD HH:mm:SS 形式(年/月/日 時:分:秒)で1日前の日時を表示する方法です。
$ date -d '1 day ago' '+%Y/%m/%d %H:%M:%S'
2017/09/20 08:39:33
さらにマイナス(-)記号を使って同じように1日前の日付を表示することも出来ます。
$ date -d '-1 day' '+%Y/%m/%d %H:%M:%S'
2017/09/20 08:40:48
今度はプラス(+)記号を使って同じように1日後の日付を表示することも出来ます。
$ date -d '+1 day' '+%Y/%m/%d %H:%M:%S'
2017/09/22 08:40:43
次に一ヶ月後は次のように表示できます。
$ date -d '+1 month' '+%Y/%m/%d %H:%M:%S'
2017/10/21 08:41:04
一ヶ月前は次のように表示できます。
$ date -d '-1 months' '+%Y/%m/%d %H:%M:%S'
2017/08/21 08:41:21
そして三ヶ月後は次のように表示できます。
$ date -d '+3 months' '+%Y/%m/%d %H:%M:%S'
2017/12/21 08:41:11
三ヶ月前は次のように表示できます。
$ date -d '-3 months' '+%Y/%m/%d %H:%M:%S'
2017/06/21 08:41:16
3時間前の日時は次のようにして取得できます。
$ date -d '-3 hours' '+%Y/%m/%d %H:%M:%S'
2017/09/21 08:03:18
また3時間後の日時は次のようにして取得できます。
$ date -d '+3 hours' '+%Y/%m/%d %H:%M:%S'
2017/09/21 14:03:27


任意の月の月初日を取得する

これは一ヶ月前の月初日を表示します。
$ date -d '-1 month' '+%Y/%m/01'
2017/08/01
こちらは一ヶ月後の月初日を取得します。
$ date -d '+1 month' '+%Y/%m/01'
2017/10/01


任意の月の月末日を取得する

こちらは今月末の末日を取得します。
$ date '+%Y/%m/%d' -d "1 day ago `date '+%Y/%m/01' -d '1 month'`"
2017/09/30