首页 文章

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

提问于
浏览
138

在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格式的日期?谢谢!

8 回答

  • 2

    Mac OS X有一个预编译的 coreutils 软件包,可在以下位置获得:

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

  • 1

    进一步采取其他答案,您可以在〜/ .bashrc或〜/ .zshrc中添加一个函数来添加日期 -I 标志:

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

    你可以用

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

    或者对于完全ISO-8601 compliant 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
    
  • 46

    在GNU日期 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
    

    -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)
    
  • 1

    适用于GNU和BSD日期的简短替代方案是:

    date -u +%FT%T%z
    
  • 17

    coreutils包提供GNU版本的工具 . 安装:

    $ brew install coreutils
    

    你可以看到提供的内容:

    $ brew list coreutils
    

    请注意它附带日期:

    $ brew list coreutils | grep date
    

    这是标准的GNU日期命令,因此它将采用-I开关:

    $ gdate -I
    2016-08-09
    
  • 5

    只需使用普通的 date 格式化选项:

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

    编辑:包括时间和UTC,这些是等价的:

    date -u -Iseconds
    
    date -u '+%Y-%m-%dT%k:%M:%S%z'
    
  • 11

    它's not a feature of Bash, it'是 date 二进制文件的一个特性 . 在Linux上,您通常会拥有 date 的GNU coreutils版本,而在OSX上,您将拥有BSD遗留实用程序 . GNU版本当然可以作为可选包安装,或者您可以自行更换 - 我相信它应该是一个简单的单行,例如在Perl .

相关问题