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

事实上,男人约会并没有列出这个选项。

有人知道这是为什么吗,或者有其他(简单的)方法让我以ISO 8601格式打印日期吗?谢谢!


当前回答

coreutils包提供了GNU版本的工具。如何安装:

$ brew install coreutils

你可以看到提供了什么:

$ brew list coreutils

注意它带有日期:

$ brew list coreutils | grep date

这是标准的GNU日期命令,所以它将使用-I开关:

$ gdate -I
2016-08-09

其他回答

你可以用

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

或者对于完全符合ISO-8601的日期,使用以下格式之一:

date -u +"%Y-%m-%dT%H:%M:%SZ"

输出:

2011-08-27T23:22:37Z

or

date +%Y-%m-%dT%H:%M:%S%z

输出:

2011-08-27T15:22:37-0800

在GNU和BSD上都可以工作的一个简短的替代方案是:

date -u +%FT%T%z

在Mac OS X上有一个预编译的coreutils包:

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

coreutils包提供了GNU版本的工具。如何安装:

$ brew install coreutils

你可以看到提供了什么:

$ brew list coreutils

注意它带有日期:

$ brew list coreutils | grep date

这是标准的GNU日期命令,所以它将使用-I开关:

$ gdate -I
2016-08-09

进一步考虑其他答案,您可以在~/中添加一个函数。Bashrc或~/。zshrc添加date -I标志:

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