web-dev-qa-db-ja.com

OS Xの `date`コマンドにはISO 8601の` -I`オプションがありませんか?

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形式で日付を印刷する他の(簡単な)方法は誰でも知っていますか?ありがとう!

170
Aseem Kishore

使用できます

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
305
amit_g

GNU date date -Idate +%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

-uTZ=UTCに似ています。 +00:00Zに置き換えることができます。

$ 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)
55
Lri

GNUとBSDの日付の両方で機能する短い代替手段は次のとおりです。

date -u +%FT%T%z
20
SomeGuy

Coreutilsパッケージは、GNUバージョンのツールを提供します。インストールする:

$ brew install coreutils

提供されるものを見ることができます:

$ brew list coreutils

日付が付いていることに注意してください。

$ brew list coreutils | grep date

これは標準のGNU dateコマンドなので、-Iスイッチを使用します。

$ gdate -I
2016-08-09
15
slm

通常のdateフォーマットオプションを使用するだけです。

date '+%Y-%m-%d'

編集:時間とUTCを含めるには、これらは同等です。

date -u -Iseconds

date -u '+%Y-%m-%dT%k:%M:%S%z'
5
Tom Zych

これはBashの機能ではなく、dateバイナリの機能です。 Linuxでは通常、GNU coreutilsバージョンのdateがありますが、OSXではBSDレガシーユーティリティがあります。 GNUバージョンは、オプションのパッケージとしてインストールすることもできますし、独自の交換を行うこともできます。 Perlで。

2
tripleee

他の回答をさらに一歩進めて、関数を〜/ .bashrcまたは〜/ .zshrcに追加して、日付-Iフラグを追加できます。

date() {
  if [ "$1" = "-I" ]; then
    command date "+%Y-%m-%dT%H:%M:%S%z"
  else
  command date "$@"
  fi
}
2
ruby_slinger

Mac OS X用にプリコンパイルされたcoreutilsパッケージがあります:

http://rudix.org/packages-abc.html#coreutils

1
tonyk