📅

cliで日付をyyyy-mm-dd形式で表示する

2024/06/23に公開

コマンドラインでは、dateコマンドを使うと日付を表示することができます。
しかし、普通に実行するとローカライズされたフォーマットで表示されます。他のプログラムで操作する際などにはyyyy-mm-dd形式で出てくれると楽です。

date
Sun Jun 23 16:32:11 AEST 2024

date +%Y-%m-%dのようにフォーマットを指定できるのですが、いつも大文字か小文字かわからなくなって調べていました。日付フォーマットはいろんな言語にありますが、それぞれでフォーマット文字が違ったりするんですよね…。
先日、helpを表示させたら-Iオプションがあることに気づきました。

date --help
(略)
  -I[FMT], --iso-8601[=FMT]  output date/time in ISO 8601 format.
                               FMT='date' for date only (the default),
                               'hours', 'minutes', 'seconds', or 'ns'
                               for date and time to the indicated precision.
                               Example: 2006-08-14T02:34:56-06:00

これを使えば、フォーマットを細かく指定しなくてもyyyy-mm-dd形式で表示できます。

date -Idate
2024-06-23

macOSビルトインのdateはGNU版と挙動が異なりますが、このオプションは対応しているので、date -Idatedate -Isecondsは使用可能です[1]

date -Iseconds
2024-06-23T16:39:20+10:00

-uも使えるので、これでタイムゾーンの影響を除いて日付チェックを書けます。大文字・小文字を覚えるよりは楽ではないでしょうか。

date -uIseconds
2024-06-23T06:44:36+00:00

コマンドラインやシェルスクリプトの環境で日付を扱う場合には覚えておくと便利かと思います。

脚注
  1. ただしnsは非対応 ↩︎

Discussion