dateコマンドの使い方

BSD系です。dateには様々なオプションがありますが、スクリプトを書く上で必要そうなものをまとめます。

出力をコントロールする

通常dateコマンドは現在日時をロングフォーマットで出力します。言語はロケールによって変わります。日本語だと結構 ダサい 間延びしてますね。

$ date
2017年 7月 5日 水曜日 07時21分39秒 JST

よくあるunix的な表示にするには。。。

date "+%Y-%m-%dT%H:%M:%S%z"
2017-07-05T07:22:06+0900

2038年問題でおなじみのunix時間(1970年1月1日0時0分0秒からの経過秒数)を表示するには。。。

date "+%s"
1499206941

このように、出力したいフォーマットを”+と”で囲んで指定します。

任意の日時を表示する

unix時間のデータが与えられていて、それが実際いつなのか?知りたいことがよくあると思います。ない?

本来は日時を設定するオプション-fを利用すればそれが可能になります。実際にはシステムの時計が狂ってしまうので、-jオプションを併用しますが。

date -jf "%s" 1499142085
Wed Jul  5 07:22:21 JST 2017

先ほどと違って、dateに入力するデータのフォーマット指定は+不要の”だけで囲んで指定します。

さらに出力フォーマットを指定するにはこれらを組み合わせます。 

date -jf "%s" 1499142085 "+%Y-%m-%dT%H:%M:%S%z"
2017-07-05T07:22:21+0900

使用可能なフォーマット指定子はウィキペディアのdate (UNIX)にまとまっています。