date
コマンドはそのようなことを提供しません。これは、RFC-3339がどこでも使用されている最新の広く普及した正気の形式(最新でも正気でもない電子メールを除く)。
現在のタイムゾーンオフセットは-08:00なので、このコマンドの最も単純な形式では、現在の時刻を2013-09-05T14:58:33.102-08:00
。
コメント
回答
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-/g
をs/\(\....\).*\([+-]\)/\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
コマンドには互換性のない
出力:+
記号は出力されません。
2013-09-05 14:58:33.102 -0800
を使用する必要があります。ただし、iがある場合を除きます。 ■スペースをまったく使用してはならない理由。