それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

dateコマンドでiso/rfc日付時刻タイムゾーンをぱぱっとフォーマットして作る

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@:~$