zshにおけるdateコマンドについて,簡単にまとめています.
日付の取得
現在時刻
dateコマンドをそのまま使うと現在時刻が出力されます.
date
2022年 7月19日 火曜日 19時25分11秒 JST
出力されるフォーマットを変更
dateコマンドに以下のようなオプションをつけると出力フォーマットを変更できます.
date +%Y-%m-%d
2022-07-19
+以降の部分を変更すれば様々なフォーマットで出力することができます.
最後のコマンドは秒単位まで表示しています.
date +%Y/%m/%d
date +%y%m%d
date +%Y%m%d%H%M%S
2022/07/19 220719 20220719193756
月・日・曜日・時刻の取得
月だけを取得
月だけを取得するには以下のようなコマンドです.
date +%b
date +%B
7 7月
日付だけを取得
日付だけを取得するには以下のようなコマンドです.
なお,+%dを+%-dに変更すると,日付が一桁の場合に前に0がつかなくなります.1
date +%d
date +%d日
21 21日
参考
21日のように出力するには+%dに「日」をくっつける方法しかなさそうです.
もしコマンドで指定できる方法をご存知の方がいればお知らせください...
曜日だけを取得
曜日名だけを取得するには以下のようなコマンドです.
date +%a
date +%A
水 水曜日
曜日を数値で取得
+%u: 曜日を1〜7で表し,1が月曜日です.+%w: 曜日を0〜6で表し,0が日曜日です.
以下の例はコマンドの実行日が水曜日なので両方3になっています.
date +%u
date +%w
3 3
時刻だけを取得
時刻だけを取得するには以下のようなコマンドです.
date +%H:%M:%S
14:42:54
任意の日時を指定してフォーマット
現在時刻ではなく任意の日時を指定するには以下のコマンドです.
date -j -f %Y-%m-%d 2022-01-01 +%Y%m%d
20220101
-jオプションで任意の日時を受け取るようにし,-fオプションで日時のフォーマットを指定しています.
%Y-%m-%dは入力日時のフォーマット2022-01-01は入力日時+%Y%m%dは出力フォーマットです.
シェルスクリプトで日時引数をフォーマット化,変数に代入する際などに使えます.
具体例はこちらをクリックしてください
内容が以下のようなdate_sample.shを作成します.
#!/bin/zsh
f_date=`date -j -f %Y-%m-%d "$1" +%Y%m%d`
echo フォーマット前:$1
echo フォーマット後:$f_date
上記のシェルスクリプトについて,日時引数をつけて実行すると以下のようになります.
./date_sample.sh 2022-01-01
フォーマット前:2022-01-01 フォーマット後:20220101
引数に取った日時をシェルスクリプト内のdateコマンドに渡してフォーマットを変換,変数に代入しています.
過去の日時を指定
日付の指定をする際は-vオプションを使用して操作します.
bashのコマンドとはかなり異なるため,注意が必要です.
指定できる期間の種類
指定可能な種類は以下のとおりです.
現在日時から「2週間前」「5時間前」などの指定ができます.
- y 年
- m 月
- w 週
- d 日
- H 時間
- M 分
- S 秒
X日・Xヶ月・X年前
-vオプションのあとに期間を指定します.
以下のようにすれば(現在日時から)-7daysとなります.2
date -v -7d
date -v -7d +%Y-%m-%d
2022年 7月13日 水曜日 23時06分53秒 JST 2022-07-13
「Xヶ月・X年前」を指定するには以下のとおりです.
それぞれ上から「6ヶ月前・3年前」となっています.
date -v -6m
date -v -3y
2022年 1月20日 木曜日 23時11分47秒 JST 2019年 7月20日 土曜日 23時11分59秒 JST
X年X日前の指定
上記で確認した期間指定は組み合わせることも可能です.
以下は「1年と3日前」という指定です.
date -v -1y -v -3d
2021年 7月19日 月曜日 23時16分28秒 JST
注意
複数の単位で期間を指定する場合はそれぞれに-vオプションが必要です.
未来の日時を指定
過去の日時を指定する場合と同様に-vオプションのあとに期間を指定します.
以下のようにすれば(現在日時から)+5daysとなります.
date -v +5d
2022年 7月25日 月曜日 23時24分18秒 JST
参考
その他の日時操作も過去の日時指定で使用した-を+に変えれば未来の日時指定になります.
未来の任意の日時を指定
あまり使い道がわかりません3が,以下のような指定もできます.
date -v 2045y -v 7m -v 20d
2045年 7月20日 木曜日 23時40分04秒 JST
未来の日時を-vオプションを使って指定しています.
なお,date -v 2045y -v julm -v 20dでも同様の結果が得られます.4
ひとこと
シェルスクリプトで日付の操作をすることが多いので,他にも気になった使い方などがあれば追記したいと思います.