ikhr.net

dateコマンドでISO 8601形式のタイムスタンプを生成する

Gatsby’s blog starterを使ってこのブログを構築しています。記事はMarkdownで書けるのですが、予め作成されている記事のYAMLフロントマターのタイムスタンプが、以下のような形式になっていました。

date: "2015-05-28T22:40:32.169Z"

この形式は基本的にISO 8601に定められているものらしく、 T の左側が日付、右側が時刻となっています。 . の右側の3桁はミリ秒で、これはISO 8601に拡張を加えたもののようです。末尾の Z はタイムゾーンがUTCであることを示します。日本の場合はプラス9時間なので、以下のようになりますね。

2015-05-28T22:40:32.169+09:00

これを手入力するのは嫌なので、 date を使って生成しようと思います。このページを見ながらフォーマット指定子をポチポチ組み立てていきます。以下で動くはず。

$ date +%Y-%m-%dT%H:%M:%S.%3N%:z
2020-06-14T02:56:38.3NZ

. から右側の表示が展開されていません。実はmacOSの date はLinuxの date とは異なるものらしく、ナノ秒の %N には対応していない模様。 %N をサポートするには、GNUの coreutils をインストールする必要があります。

$ brew install coreutils

これで gdate というコマンドが使えるようになります。先ほどの内容をコマンド名だけ変更して実行します。

$ gdate +%Y-%m-%dT%H:%M:%S.%3N%:z
2020-06-14T02:59:18.462+09:00

上手くいきました。


...