Bashスクリプトでは、現在の日付時刻を ISO 8601 形式(できればUTC)で出力したいのですが、これはdate -I
と同じくらい簡単なはずです
http://ss64.com/bash/date.html
しかし、これは私のMacでは動作しないようです:
$ date -I
date: illegal option -- I
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
実際、man date
はこのオプションをリストしません。
これがなぜなのか、またはISO 8601形式で日付を印刷する他の(簡単な)方法は誰でも知っていますか?ありがとう!
使用できます
date "+%Y-%m-%d"
または、完全に ISO-8601準拠の日付 の場合は、次の形式のいずれかを使用します。
date -u +"%Y-%m-%dT%H:%M:%SZ"
出力:
2011-08-27T23:22:37Z
または
date +%Y-%m-%dT%H:%M:%S%z
出力:
2011-08-27T15:22:37-0800
GNU date date -I
はdate +%F
と同じであり、-Iseconds
および-Iminutes
にはUTCオフセット付きの時刻も含まれます。
$ date +%F # -I or +%Y-%m-%d
2013-05-03
$ date +%FT%T%z # -Iseconds or +%Y-%m-%dT%H:%M:%S%z
2013-05-03T15:59:24+0300
$ date +%FT%H:%M # -Iminutes or +%Y-%m-%dT%H:%M%z
2013-05-03T15:59+0300
-u
はTZ=UTC
に似ています。 +00:00
はZ
に置き換えることができます。
$ date -u +%FT%TZ
2013-05-03T12:59:24Z
これらは、ISO 8601の有効な日付形式または時刻形式でもあります。
20130503T15 (%Y%m%dT%M)
2013-05 (%Y%m)
2013-W18 (%Y-W%V)
2013-W18-5 (%Y-W%V-%u)
2013W185 (%YW%V%u)
2013-123 (%Y-%j, ordinal date)
2013 (%Y)
1559 (%H%M)
15 (%H)
15:59:24+03 (UTC offset doesn't have to include minutes)
これらは次のとおりではありません。
2013-05-03 15:59 (T is required in the extended format)
201305 (it could be confused with the YYMMDD format)
20130503T15:59 (basic and exteded formats can't be mixed)
GNUとBSDの日付の両方で機能する短い代替手段は次のとおりです。
date -u +%FT%T%z
Coreutilsパッケージは、GNUバージョンのツールを提供します。インストールする:
$ brew install coreutils
提供されるものを見ることができます:
$ brew list coreutils
日付が付いていることに注意してください。
$ brew list coreutils | grep date
これは標準のGNU dateコマンドなので、-Iスイッチを使用します。
$ gdate -I
2016-08-09
通常のdate
フォーマットオプションを使用するだけです。
date '+%Y-%m-%d'
編集:時間とUTCを含めるには、これらは同等です。
date -u -Iseconds
date -u '+%Y-%m-%dT%k:%M:%S%z'
これはBashの機能ではなく、date
バイナリの機能です。 Linuxでは通常、GNU coreutilsバージョンのdate
がありますが、OSXではBSDレガシーユーティリティがあります。 GNUバージョンは、オプションのパッケージとしてインストールすることもできますし、独自の交換を行うこともできます。 Perlで。
他の回答をさらに一歩進めて、関数を〜/ .bashrcまたは〜/ .zshrcに追加して、日付-I
フラグを追加できます。
date() {
if [ "$1" = "-I" ]; then
command date "+%Y-%m-%dT%H:%M:%S%z"
else
command date "$@"
fi
}
Mac OS X用にプリコンパイルされたcoreutils
パッケージがあります: