コマンド
$ date --version date (GNU coreutils) 8.22 Copyright (C) 2013 Free Software Foundation, Inc. ライセンス GPLv3+: GNU GPL version 3 or later <http://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. 作者 David MacKenzie。
現在の日時を unixtime にする
date +%s
#=> 1654665889
任意の日時を unixtime にする
date -Isecond #=> 2022-06-08T14:25:48+0900 date +%s --date '2022-06-08T14:25:48+0900' #=> 1654665948 date +%s --date '2022-06-08 14:25:48' #=> 1654665948 echo 2022-06-08T14:25:48+0900 | date +%s --date -- #=> 1654614000
指定の時間に timezone をつけない場合、システムの timezone に依存して変換されるのかな?未確認
unixtime を日時にする
date --date @1654665948 #=> 2022年 6月 8日 水曜日 14:25:48 JST
unixtime を日時にするときにフォーマットする
date --date @1654665948 -Isecond #=> 2022-06-08T14:25:48+0900 date --date @1654665948 +'%F %T' #=> 2022-06-08 14:25:48
unixtime を日時にフォーマットしつつ、24時間前の日時にする
date --date @1654665948 +'%F %T' --date '1 day ago' #=> 2022-06-07 14:33:17
ちなみに
date コマンドのよく使うオプション
date -I #=> 2022-06-08 date -Isec #=> 2022-06-08T14:35:20+0900 date -Ins #=> 2022-06-08T14:37:22,024306763+0900 date --date '1 day ago' -Isecond # 2 days ago, 2 hours ago など指定できる #=> 2022-06-07T14:37:44+0900 date +%F #=> 2022-06-08 date +%T #=> 14:38:40
ISO8601 フォーマットで出力されるのでとても楽
時刻に :
コロンが入っていてファイル名にできないときは以下のようにしている
date +%F_%H-%M-%S #=> 2022-06-08_14-39-50 # or date +%FT%H-%M-%S #=> 2022-06-08T14-40-12
感想
date
コマンドってやはり使える!
便利なオプション増えてくれてとても助かる
--date
オプションが複数同時につけれるとは思っていなかったので、発見である
-Isecond
が長いな。と思っていたところ、 -Isec
で出力されたのは驚いた
あれ?
もしかして、 -Is
だけでも OK では?
date -Is #=> 2022-06-08T14:47:54+0900
出力された
適当に間違ったオプションにして help を見る
(ごめんなさい🙇
$ date -Ix date: `--iso-8601' に対する引数 `x' が間違っています 有効な引数: - `hours' - `minutes' - `date' - `seconds' - `ns' Try 'date --help' for more information.
もしかして、この TIMESPEC の頭文字が重複していないから出力された可能性ある
$ date -Ih 2022-06-08T14+0900 $ date -Im 2022-06-08T14:50+0900 $ date -Id 2022-06-08 $ date -Is 2022-06-08T14:50:50+0900 $ date -In 2022-06-08T14:50:52,645656885+0900
なるほど。ミリ秒がなかったのは、 minutes
と重複するからかな
面白い