はじめに
何らかのシステムに携わっているときって扱う日付がunixtimeな時多いですよね。
例えば下記のようなときにMacでささっと変換できたら便利だと思います。
- unixtimeなシステムで、データ確認のために人間がわかる表示で日時を確認したい
- unixtimeなシステムに、debugのために現在日付をunixtimeに変換して入れたい
そういうwebサイトもありますがわざわざ検索して開いて入力して変換して、、、
というのもあれですしそんな時に手元でささっと変換するメモ。
アジェンダ
- dateコマンドそのもの
- dateコマンドでunixtimeを日時文字列に変換する
- dateコマンドで日時文字列をunixtimeに変換する
1. dateコマンドそのもの
dateコマンドはそのまま打つとosの現在日時を表示してくれます。
$ date 2016年 11月28日 月曜日 14時04分39秒 JST
utc時刻を得たいときは-u
オプションで表示できます。
# まんま表示 $ date 2016年 11月28日 月曜日 14時05分51秒 JST # UTCで表示 $ date -u 2016年 11月28日 月曜日 05時05分51秒 UTC
また、1日前
や1日後
もオプションで指定することで表示できます。
# 今 $ date 2016年 11月28日 月曜日 14時09分08秒 JST # 1日後 $ date -v +1d 2016年 11月29日 火曜日 14時09分08秒 JST # 1日前 $ date -v -1d 2016年 11月27日 日曜日 14時09分08秒 JST
dateコマンドではないですが、cal
と打てばカレンダーで前後の日付も確認できますね。
$ cal 11月 2016 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
そしてunixtime
で表示したい場合は ``をつけます
$ date +%s 1480310097
2. dateコマンドでunixtimeを日時文字列に変換する
ということで本題です。
これは簡単で-r
オプションに続けてunixtimeを指定すると人間がわかる日時の文字列に変換してくれます。
$ date +%s 1480310553 $ date -r 1480310553 2016年 11月28日 月曜日 14時22分33秒 JST
なんとなく見にくいという場合はフォーマットも指定できます。
$ date -r 1480310553 +"%Y/%m/%d %H:%M:%S" 2016/11/28 14:22:33
3. dateコマンドで日時文字列をunixtimeに変換する
日時文字列からunixtimeへの変換はプログラムなんかでもよくある形を使います。
日付文字列を指定しますが、合わせてマシンがその文字列を理解できるようにフォーマット文字列も添えてあげます。
# 日時文字列をunixtimeに変換する $ date -j -f "%Y-%m-%d %H:%M:%S" "2016-11-28 14:22:33" "+%s" 1480310553 # 変換したunixtimeを戻してみる $ date -r 1480310553 2016年 11月28日 月曜日 14時22分33秒 JST
-j
オプションは詳細は、
PCの日付を変更してしまうので要注意と書いてあったりしますが権限がなければこんな感じでエラーになるので仮に忘れてもまぁ、、、
$ date -f "%Y-%m-%d %H:%M:%S" "2016-11-28 14:22:33" "+%s" date: bind: Permission denied date: settimeofday (timeval): Operation not permitted
まとめ
manを見ればわかりますがここまでで使ったオプションは下記のみです。
# `-u` : UTCで表示 $ date -u 2016年 11月28日 月曜日 05時05分51秒 UTC # -v :-vに続けて`[+-](数値)(単位)`とすることで`n(単位)[前後]`を表示 # (例えば`n日前`とか) $ date -v +1d 2016年 11月29日 火曜日 14時09分08秒 JST # +%s : unixtimeを表示 $ date +%s 1480310097 # -r : -rに続けてunixitmeを指定 # フォーマットは`+"フォーマット文字列"`で $ date -r 1480310553 +"%Y/%m/%d %H:%M:%S" 2016/11/28 14:22:33 # -j -f : -j -fに続けてフォーマット、日付文字列、+%s $ date -j -f "%Y-%m-%d %H:%M:%S" "2016-11-28 14:22:33" "+%s" 1480310553
必要そうだったらフォーマットを毎回指定するのは面倒なのでaliasにしちゃってもよいかもしれませんね。
参考
おわり
書いたものの、コレ系は使う機会になるたびに調べてはを繰り返してるので
今後はここに来てさっと知りたい情報が得れれば自分的にはオッケーという自分めもでした