RFC-3339形式で日付を印刷するための標準コマンドは何ですか?

RFC-3339形式で日付を印刷するための標準コマンドは何ですか?

RFC-3339は、あらゆる場所で使用されている現代的で広く使用されているサウンドフォーマットなので、このdateコマンドはそのような機能を提供しません(現代的でも健全ではない電子メールを除く)。

私のタイムゾーンオフセットは現在-08:00なので、このコマンドの最も単純な形式は現在時刻をとして印刷する必要があります2013-09-05T14:58:33.102-08:00

答え1

date複数の形式を処理するためにGNU実装(バージョン5.90以降)に切り替えることを使用できるようです--rfc3339=

はい

$ date --rfc-3339=date
2014-03-19

$ date --rfc-3339=seconds
2014-03-19 18:00:05-04:00

$ date --rfc-3339=ns
2014-03-19 18:00:08.179780629-04:00

Tハッカーとして追加したい場合:

$ date --rfc-3339=seconds | sed 's/ /T/'
2014-03-19T18:35:03-04:00

ミリ秒単位で必要な場合:

$ date --rfc-3339=ns | sed 's/ /T/; s/\(\....\).*\([+-]\)/\1\2/g'
2014-03-19T18:42:52.362-04:00

引用する

答え2

GNUを使用するdate(5.90以上):

$ TZ=America/Anchorage date '+%FT%T.%N%:z'
2014-03-19T14:29:31.041119357-08:00

ミリ秒、マイクロ%N秒に置き換え...%3N%6N

AFAIK、POSIX、Unix、またはLSB仕様は、1秒未満の粒度で時間を表示できるコマンドを指定しませんが、RFC 3339では小数部がオプションです。

POSIX/Unix/LSB strftime は%zTZ オフセットを としてマークすることをサポートしているため、-0800最も移植性の高い方法は次のとおりです。

 $ TZ=America/Anchorage perl -MPOSIX -le '$t = strftime "%Y-%m-%dT%T%z",
   localtime; $t =~ s/..$/:$&/; print $t'
 2014-03-19T14:30:23-08:00

答え3

フォーマットに応じて時間を設定することもできます。RFC3339(ISO8601)より簡単:

$ date -u +"%Y-%m-%dT%H:%M:%SZ"
2016-11-08T08:52:55Z

メモ:この形式は次にも使用されます。タグモードコンベンションRC 1.0

答え4

GNUdateにはISO-8601形式が組み込まれています。これはRFC-3339に非常に近いか等しくありませんか?

1065 % date --iso-8601=seconds
2014-03-19T16:51:16-0600

関連情報