date コマンド便利だけど、フォーマット指定がめんどくさい
takuya@:~$ date --date "2017-03-22 + 90days" +"%Y-%m-%d %H:%M:%S" 2017-06-20 00:00:00
ああ、めんどくさいよ%Y-%m-%d
、記号が多くてめんどくさい。
よくつかう日付は、オプションが用意されている
$ date -I 2017-03-22
よく使う日付のフォーマットもショートカットが用意されている。
$ date +'%F' 2017-03-22 $ date +'%T' 15:31:54 $ date +'%F %T' 2017-03-22 15:30:49
時刻を入れるなら、私達が日常使いではコレで十分だが、UNIX時刻でいくならタイムゾーンがないとおかしくなるので、DBなどはタイムゾーンを入れたほうが無難。
-I
は更に使える
さらによく使うタイムスタンプにもショートカットが用意されている
$ date -Iseconds 2017-03-21T14:42:20+0900
スペースは駄目だよ。date -I seconds
は無効
または、次のようにしてもほぼ同じである。
date --rfc-3339=seconds 2017-03-21 14:43:47+09:00
rfc 3339 のフォーマットの例
rfc 3339 は私達が見ても結構わかりやすい。rfc 3339
の場合はスペースをいれる。
ISOとRFCでオプションの渡し方が違うので注意
$date -R date 2017-03-22 $date -R seconds 2017-03-22 15:44:26+09:00 $date -R ns 2017-03-22 15:44:26.468367829+09:00
ロングオプションなら
$date --rfc-3339=date 2017-03-22 $date --rfc-3339=seconds 2017-03-22 15:38:04+09:00 $date --rfc-3339=ns 2017-03-22 15:38:04.553941046+09:00
-I
オプションの例
$ date -Idate 2017-03-21 $ date -Ihours 2017-03-21T14+0900 $ date -Iseconds 2017-03-21T14:47:08+0900 $ date -Ins 2017-03-21T14:47:11,948607361+0900
ロングオプションなら次の通り
$ date --iso-8601=date 2017-03-22 $ date --iso-8601=hours 2017-03-22T15+0900 $ date --iso-8601=minutes 2017-03-22T15:36+0900 $ date --iso-8601=seconds 2017-03-22T15:36:17+0900 $ date --iso-8601=ns 2017-03-22T15:36:17,095634462+0900
ナノ秒を含めたタイムスタンプを作るなら
$date --rfc-3339=ns 2017-03-21 14:46:40.646812475+09:00 $ date --iso-8601=ns 2017-03-22T15:36:17,095634462+0900
などとすると便利。
その他のDateコマンドの使い方はこちら
date コマンドで「昨日」などの日付を計算するとき
date コマンドで相対日付で目的の日をパパっと計算する。 - それマグで!
date コマンドのオプションについて
dateコマンドを見なおしてみる。dateコマンドオプションは使える - それマグで!
利用したdateコマンドについて
dateコマンドはいくつか実装があるので、若干の差異が有ります。利用する前にコマンドがGPL/BSDで違いがある。
takuya@:~$ date --version date (GNU coreutils) 8.23 Copyright (C) 2014 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。 takuya@:~$