Linux Mac シェルコマンド シェルスクリプト 備忘録

macのdateコマンド(BSD系)で日付を出力、計算する

Macに標準で入ってるdateは違うらしい

ちょっと思いついたプロジェクトのために、シェルのdateコマンドで日付の計算をしようと思いました。

ぐぐって出てきたコマンドを入力してもエラーになってしまいます。

調べてみるとどうやらMacのdateコマンドは検索でよく見つかるGNU系ではなくBSD系のもので、使い方が違うことが分かりました。

後々のために、macのdateコマンドの使い方をまとめておきます。

とりあえず自分が使いそうなものだけに絞っています。

BSD系dateコマンドの使い方まとめ

現在時刻を出力

date
2022年 1月22日 土曜日 13時04分56秒 JST

出力フォーマットを指定

例:
date "+%y %m %d %a %H %M %S %T %s"
22 01 23 日 00 04 55 00:04:55 1642863895

date "+%Y/%m/%d %H:%M.%S---%T"
2022/01/22 13:08.33---13:08:33

"%y %m %d %a %H %M %S %T %s"の意味
年 月 日 曜日 時 分 秒 時間 UNIX時間(1970年1月1日0時0分0秒からの経過秒数)

西暦の桁数指定は大文字小文字で行う
%Y = 2022
%y = 22

曜日も大文字小文字で違う
%a = 日
%A = 日曜日

月/日/年をまとめて出力
%D = 01/23/22

計算(現在時間から)

-vオプションに数字と要素を指定する

-jオプションを付けると日時を変更せずに計算処理だけ行うらしい。とりあえず付けとけば良さそう

今から30分後
date -j -v+30M

今から3日後
date -j -v+30d

今から2年前
date -j -v-2y

今から2年8ヶ月と3日前
date -j -v-2y -v-8m -v-3d

今から90分後の時刻を形式を指定して出力
date -v+90M -j "+%Y %m %d %T %H %M %S"

任意の形式で日付を渡して、任意の形式に変換する

date -j -f "入力形式" "渡す日付" "+出力形式"

例:
date -j -f "%Y/%m/%d" "1972/1/20" "+%y年%m月%d日(%a)"
72年01月20日(木)

日付を変数で渡す
day=$(date "+%Y/%m/%d")
date -j -f "%Y/%m/%d" "${day}" "+%y年%m月%d日(%a)"
22年01月23日(日)

渡した日付を計算して変換

上記に -v オプションを組み合わせる
-v は先頭に置かないとエラーになった

例:
date -v+1y -j -f "%Y/%m/%d" "1972/1/20" "+%y年%m月%d日(%a)"
73年01月20日(土)

-Linux, Mac, シェルコマンド, シェルスクリプト, 備忘録