UMAの備忘録

Linuxやら大気科学やらについてゆるりと。

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)の変換。
UTCJSTに変換するなら、

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」が入る

これで日時の操作も自由自在。