date コマンドの自分的チートシート。
- date コマンドのチートシート
- Mac で GNU date を使う
- オプションを指定せずに実行する
- 日時をロケールに基づくフォーマットで表示する
- 日時を任意のフォーマットで表示する
- 日時を ISO 8601 フォーマットで表示する
- 日時を RFC 3339 フォーマットで表示する
- 任意のタイムゾーンでの日時を表示する
- UTC での日時を表示する
- 指定した日時を表示する
- ファイルから読み取った日時を表示する
- 標準入力から読み取った日時を表示する
- JST から UTC に変換する
- UTC から JST に変換する
- 任意のタイムゾーンから別のタイムゾーンに変換する
- エポック秒を表示する
- エポック秒を任意のフォーマットで表示する
- 月末日を表示する
date コマンドの自分的チートシートをメモしておく。
date コマンドのバージョン。
$ date --version date (GNU coreutils) 9.0 Copyright (C) 2021 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by David MacKenzie.
date コマンドのチートシート
Mac で GNU date を使う
macOS にインストールされている date コマンドは BSD 版のため、GNU date を使うためには自分でインストールする必要がある。 brew で coreutils をインストールすると楽。
$ brew install coreutils
brew でインストールした GNU のコマンドは g
というプリフィックスが付いており、たとえば date コマンドなら gdate というコマンドになっている。
g
を打つのが面倒くさいときは alias date='gdate'
のようにエイリアスを付けるとよい。
ただ、 date のほかにも多数のコマンドがインストールされるので、個別にエイリアスを付けるのは少々面倒くさい。
そこで、GNU コマンドがインストールされたパスを優先して検索するように、シェルの設定ファイルなどで PATH
変数を設定してしまうのがよいと思う。
$ PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
オプションを指定せずに実行する
オプションを指定せずに実行すると現在日時をロケールに基づくフォーマットで表示する。
$ date 2022年 6月 14日 水曜日 20:03:48 JST
日時をロケールに基づくフォーマットで表示する
LC_TIME
を指定して実行すると、現在日時を指定したロケールに基づくフォーマットで表示する。
$ date 2022年 6月 14日 水曜日 20:03:48 JST $ LC_TIME=en_US date Wed Jun 14 20:03:48 JST 2022
日時を任意のフォーマットで表示する
+FORMAT
を指定して実行すると、現在日時を指定したフォーマットで表示する。
指定可能なフォーマットは man date
にて確認できる。
$ date +'%Y/%m/%d %H:%M:%S (%z)' 2022/06/14 20:03:48 (+0900)
日時を ISO 8601 フォーマットで表示する
-I<精度>
, --iso-8601=<精度>
を指定すると、現在日時を ISO 8601 フォーマットで表示する。
+FORMAT
で ISO 8601 フォーマットを指定しても同じことができるけど、こちらのほうがタイプ数が少なくて楽。
$ date -Idate 2022-06-14 $ date -Iseconds 2022-06-14T20:03:48+09:00 $ date -Ins 2022-06-14T20:03:48,000000000+09:00
日時を RFC 3339 フォーマットで表示する
--rfc-3339=<精度>
を指定すると、現在日時を RFC 3339 フォーマットで表示する。
+FORMAT
で RFC 3339 フォーマットを指定しても同じことができるけど、こちらのほうがタイプ数が少なくて楽。
精度は date
, seconds
または ns
を指定できる。
$ date -f - --rfc-3339=date 2022-06-14 $ date --rfc-3339=seconds 2022-06-14 20:03:48+09:00 $ date --rfc-3339=ns 2022-06-14 20:03:48.000000000+09:00
任意のタイムゾーンでの日時を表示する
TZ=<タイムゾーン>
を指定すると、指定したタイムゾーンでの現在日時を表示する。
$ TZ='Asia/Tokyo' 2022年 6月 14日 火曜日 20:03:48 JST $ TZ=UTC date 2022年 6月 14日 火曜日 11:03:48 UTC
UTC での日時を表示する
-u
, --utc
または --universal
を指定すると UTC での現在日時を表示する。
TZ=UTC
を指定するのと同じことができるけど、こちらのほうがタイプ数が少なくて楽。
$ date -u 2022年 6月 14日 火曜日 11:03:48 UTC
指定した日時を表示する
-d
, --date
で日時を指定すると、指定した日時を表示する。
$ date -d '2022-02-28 01:23:45+09:00' 2022年 2月 28日 月曜日 01:23:45 JST
日時はかなり柔軟に指定でき、何日前、何ヶ月後といった日時も表示できる。
# 4日前 $ date -d '2022-02-28 01:23:45+09:00 4 days ago' 2022年 2月 24日 木曜日 01:23:45 JST # 1ヶ月後 $ date -d '2022-02-28 01:23:45+09:00 next month' 2022年 3月 28日 月曜日 01:23:45 JST
ファイルから読み取った日時を表示する
-f
, --file
を指定するとファイルから読み取った日時を表示する。
$ cat date.txt 2022-02-28 01:23:45+09:00 2022-03-31 01:23:45+09:00 $ date -f date.txt 2022年 2月 28日 月曜日 01:23:45 JST 2022年 3月 31日 木曜日 01:23:45 JST
標準入力から読み取った日時を表示する
-f
, --file
にて -
を指定すると標準入力から読み取った日時を表示する。
$ cat date.txt | date -f- 2022年 2月 28日 月曜日 01:23:45 JST 2022年 3月 31日 木曜日 01:23:45 JST
JST から UTC に変換する
$ date -Iseconds 2022-06-14T20:03:48+09:00 $ date -Iseconds | date -f- -u -Iseconds 2022-06-14T11:03:48+09:00
UTC から JST に変換する
$ date -u -Iseconds 2022-06-14T11:03:48+09:00 $ date -u -Iseconds | TZ='Asia/Tokyo' date -f- -u 2022-06-14T20:03:48+09:00
任意のタイムゾーンから別のタイムゾーンに変換する
# CST (中国標準時) は +08:00 $ TZ='Asia/Shanghai' date -Iseconds 2022-06-14T19:03:48+08:00 # AEST (オーストラリア東部標準時) は +10:00 $ TZ='Australia/Brisbane' date -Iseconds 2022-06-14T21:03:48+10:00 $ TZ='Asia/Shanghai' date -Iseconds | TZ='Australia/Brisbane' date -f- -Iseconds 2022-06-14T21:03:48+10:00
エポック秒を表示する
+%s
を指定して実行すると エポック秒 を表示する。
$ date +'%s' 1655204628 $ date -Iseconds | date -f- +'%s' 1655204628
エポック秒を任意のフォーマットで表示する
$ echo '@1655204628' | date -f- -Iseconds 2022-06-14T20:03:48+09:00 $ echo '@1655204628' | date -f- +'%Y/%m/%d %H:%M:%S (%z)' 2022/06/14 20:03:48 (+0900)
月末日を表示する
月初日 (1日) に1ヶ月を足してから1日引くと月末日を求めることができる。
$ date -d '2022-02-01 1 months 1 days ago' 2022年 2月 28日 月曜日 00:00:00 JST $ date -d '2022-03-01 1 months 1 days ago' 2022年 3月 31日 木曜日 00:00:00 JST
sed と組み合わせると入力された日付の月末日を簡単に求めることができる。
$ echo '2022-02-15' | sed -E 's/-[0-9]+$/-01 1 months 1days ago/' | date -f- 2022年 2月 28日 月曜日 00:00:00 JST $ echo '2022-03-15' | sed -E 's/-[0-9]+$/-01 1 months 1days ago/' | date -f- 2022年 3月 31日 木曜日 00:00:00 JST