dateコマンドについて
どうも、UMAです。
まだまだ昔のブログから移築をしている最中です。
今回は date
コマンドです。
これ、使いこなせるとムチャクチャ便利です。
date
コマンド、単にターミナルとかで叩くと
現在の日時が返ってきます。
しかし、オプションで日付を計算してくれる機能があり、
それを使うと特定の日時を出力してくれます。
その使い方は以下の通り。
date +[format] -d [string]
ここからは、 [format]
と [string]
の書き方を
順番に説明していきたいと思います。
① +[format]
+
に続いて [format]
を指定することで、そのフォーマットで
出力してくれます。
具体的には、
- %Y ……年(4桁)
- %m ……月(2桁)
- %d ……日(月内通算日数、2桁)
- %H ……時(00〜23、2桁)
- %M ……分(00〜59、2桁)
例えば現在時刻を「2019-12-23 21:00」みたいに表示したい時は、
date +"%Y-%m-%d %H:%M"
とすればOK。
② -d [string]
-d
に続いて [string]
のところに「何時間前」とか「何日後」と
書くと、その通りに時刻を計算して表示してくれます。
- 前 → ~ [単位] ago
- 後 → ~ [単位]
例えば、「2000年1月1日0時0分の20年後」なら
date -d "2000/01/01 00:00 20 years"
という感じ。
なお、 -d
に引き渡す時刻は、日付は /
(スラッシュ)、
時刻は :
(コロン)で区切ります。
また「20 years」の複数形の「s」はなくても勝手に計算してくれる模様。
③よくやる使い方
我々の業界でよくやるのは、日本時間(JST)と世界標準時(UTC)の変換。
UTCをJSTに変換するなら、
date_UTC="2019/12/23 12:00" date_JST=`date +"%Y-%m-%d %H:%M" -d "${date_UTC}" 9 hours` #「2019-12-23 21:00」が入る
あとは、ある月の末日を調べる方法。
this_month="2019/12" next_month=`date +"%Y/%m" -d "${this_month}/01 1 month"` day_end=`date +"%d" -d "${next_month}/01 1 day ago"` #「31」が入る
これで日時の操作も自由自在。