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

dateコマンドはそのようなことを提供しません。これは、RFC-3339がどこでも使用されている最新の広く普及した正気の形式(最新でも正気でもない電子メールを除く)。

現在のタイムゾーンオフセットは-08:00なので、このコマンドの最も単純な形式では、現在の時刻を2013-09-05T14:58:33.102-08:00

コメント

  • どの標準に関心がありますか
  • 私は個人的にGNUに問題はありませんが、壮大なスキームでは、実際にはそれよりも広い必要があります。また、妥当なデフォルト(短いオプション、ミリ秒の精度)が付属し、サブ秒の精度(0または9以外の桁数)を指定します。
  • ' s ではない正しい形式:合計空白がないと、人間が不必要に読みにくくなります。わずかなバリエーション2013-09-05 14:58:33.102 -0800を使用する必要があります。ただし、iがある場合を除きます。 ■スペースをまったく使用してはならない理由。
  • 人間と機械の両方にとって読みにくいメールの日付形式(RFC 822、2822)と比較していました。

回答

date(バージョン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 

参照

コメント

  • 最近では、' T '。 --iso-8601' option accepts the same arguments as -rfc-3339`で、' T 'が含まれています出力。
  • 大西洋の東でも機能するには、Sedパーツs/\(\....\).*-/\1-/gs/\(\....\).*\([+-]\)/\1\2/gにする必要があります。
  • @ svante-詳細に感謝します。修正されました。
  • @Eonilは実際には正しくありませんが、RFC3339は次のように述べています。NOTE: ISO 8601 defines date and time separated by "T". RFC3339では、代わりにスペース。 ietf.org/rfc/rfc3339.txt セクション5.6
  • @ rwenz3lをお読みください。私のせいです。 ABNFの部分だけを読んだだけで、メモを見逃しました。ご指摘いただきありがとうございます。

回答

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秒未満の粒度ですが、RFC3339では分数部分はオプションです。

POSIX / Unix / LSBstrftimeは、TZオフセットをividとして表示する%zをサポートしています。 = “20a537d531″>

なので、おそらく最もポータブルなものは次のとおりです。

 $ 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 

回答

RFC3339(ISO8601)に従って時間をフォーマットすることも簡単です:

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

注:このフォームatは、ラベルスキーマコンベンションRC1.0

コメント

  • でも使用されます。 'は有効なRFC3339ではありません。 Eran 'の「日付+%Y-%m-%dT%T%z」の回答は正しく、文字数が少なくなっています。 UTCパス-uフラグが必要な場合は、タイムゾーンオフセットをゼロにします。
  • -uフラグを使用すると、この答えは正しいですよね?
  • @briceburgなぜこれが有効なRFC3339ではないのですか? tools.ietf.org/html/rfc3339#section-5.6 によると、私が知る限り、それは正しいようです。

回答

GNU dateにはISO-8601形式が組み込まれています-そうではありませんRFC-3339に非常に近いか、それとも同一ですか?

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

コメント

  • ISO-8601ではさまざまなことが可能です日付と時刻のフォーマットですが、OPは特に W3C日付フォーマット "完全な日付に加えて時間、分、秒、および秒の10分の1YYYY-MM-DDThh:mm:ss.sTZD(例:1997-07-16T19:20:30.45 + 01:00)" W3Cの日付と時刻の形式

回答

古き良きものはどうですか:

$ date +%Y-%m-%dT%T%z 2015-10-29T14:47:06+0200 

コメント

  • タイムゾーン情報はどこにありますか?
  • これはMacとLinuxの両方で機能します' date '
  • ミリ秒はどうですか?
  • ここで簡単に注意してください。RFCを開かずに、タイムゾーンセグメント0200にコロンがないため、コロンが必要なシステムが破損する可能性があります。
  • @MikeMackintosh 'のメモが適切です。ここに示されている出力は、RFC3339の正式な日付ではありません。 RFC 3339では、タイムゾーンセグメントのコロンが必要です。 tools.ietf.org/html/rfc3339#section-5.6 time-numoffsetの定義を参照してください。

回答

echo "Local date only:" date "+%Y-%m-%d" echo echo "Local date and time:" date "+%Y-%m-%dT%H:%M:%S%z" | sed "s@^.\{22\}@&:@" echo echo "UTC date and time:" date -u "+%Y-%m-%dT%H:%M:%SZ" 

これらのコマンドは、例外を除いてPOSIX互換です。 %z変換仕様のただし、%zは広くサポートされており、Linux、MacOS、FreeBSD、OpenBSD、NetBSD、DragonFlyBSD、Solaris、Minix、Haikuでも同じように機能します。また、Busybox、Toybox、sbase(suckless.orgベースシステムユーティリティ)のツールとも連携します。 %zはタイムゾーンオフセットを±HHMM形式で出力するため、追加するにはsedパイプが必要です。コロンを使用して±HH:MMに変更します。

注:Heirloomプロジェクトのdateコマンドには互換性のない

出力:+記号は出力されません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です