2017年5月17日水曜日

dateコマンドについて

久しぶりの投稿になります。


今日はシェルスクリプトのdateコマンドについて。

シェルスクリプト中で日付を計算する際に割りとよく用いるのですが、
ついつい出力のフォーマットを忘れがちです。
多くのウェブサイトではフォーマットが全部出てくるので、この記事では
 よく使うものに絞って書こうかと。


まず、基本のオプションです。

 +[format] …フォーマットを指定する(書き方は下記①)
-d [string] …[string]で指定した日付・時刻を表示する(書き方は下記②)


①フォーマットの指定
よく使うフォーマットは以下の通り。

%Y …年(4桁)
%m …月(2桁)
%d …日(月内通算日数、2桁)
%H …時(00〜23、2桁)
%M …分(00〜59、2桁)

例えば、「2017-05-17 15:30」みたいに表示したい時は
 +"%Y-%m-%d %H:%M"
というふうに書けばOK。 


②日付・時刻の指定
[string]の部分に「何時間後」や「何日前」と書くと自動で計算してくれる。

前 → 〜 [単位] ago
後 → 〜 [単位]

例えば、「2017年5月17日12時の3日前」なら
 -d "2017/05/17 12:00 3 days ago"
と書けばOK。

ちなみに-dのところでは、日付は「/(スラッシュ)」、時刻は「:(コロン)」で区切る。
また、「3 days」の複数形のsはなくても勝手に計算してくれる模様。


③よくやる書き方
よくやるのは世界標準時(UTC)と日本時間(JST)の変換。
世界標準時を日本時間に変更するなら、

date_JST=`date +"%Y-%m-%d %H:%M" -d "${date_UTC} 9 hours"`



これだけ解れば、便利に使い回せると思います。