OS X上的`date`命令没有ISO 8601`-I`选项?

在Bash脚本中,我想以ISO 8601格式(最好是UTC)打印当前的date时间,而且看起来这应该和date -I一样简单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? 谢谢!

你可以使用

 date "+%Y-%m-%d" 

或者完全符合ISO-8601的date ,请使用以下格式之一:

 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 

在GNUdatedate -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 

-u就像TZ=UTC+00:00可以用Z代替。

 $ date -u +%FT%TZ 2013-05-03T12:59:24Z 

这些也是有效的ISO 8601date或时间格式:

 20130503T15 (%Y%m%dT%M) 2013-05 (%Y%m) 2013-W18 (%YW%V) 2013-W18-5 (%YW%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和BSDdate都可以使用的简短select是:

 date -u +%FT%T%z 

coreutils软件包提供了GNU版本的工具。 安装:

 $ brew install coreutils 

你可以看到提供的内容:

 $ brew list coreutils 

注意它附带date:

 $ brew list coreutils | grep date 

这是标准的GNUdate命令,所以它将采取-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中。

有一个用于Mac OS X的预编译coreutils软件包,位于:

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