Ase*_*ore 178 macos bash iso8601
在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]
Run Code Online (Sandbox Code Playgroud)
事实上,man date并未列出此选项.
任何人都知道这是为什么,或任何其他(简单)方式让我打印ISO 8601格式的日期?谢谢!
ami*_*t_g 320
你可以用
date "+%Y-%m-%d"
Run Code Online (Sandbox Code Playgroud)
或者,对于完全符合ISO-8601标准的日期,请使用以下格式之一:
date -u +"%Y-%m-%dT%H:%M:%SZ"
Run Code Online (Sandbox Code Playgroud)
输出:
2011-08-27T23:22:37Z
Run Code Online (Sandbox Code Playgroud)
要么
date +%Y-%m-%dT%H:%M:%S%z
Run Code Online (Sandbox Code Playgroud)
输出:
2011-08-27T15:22:37-0800
Run Code Online (Sandbox Code Playgroud)
Lri*_*Lri 56
在GNU中,日期与UTC偏移date -I相同date +%F,-Iseconds并且-Iminutes还包括时间.
$ 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
Run Code Online (Sandbox Code Playgroud)
-u就像TZ=UTC.+00:00可以替换为Z.
$ date -u +%FT%TZ
2013-05-03T12:59:24Z
Run Code Online (Sandbox Code Playgroud)
这些也是有效的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)
Run Code Online (Sandbox Code Playgroud)
这些不是:
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)
Run Code Online (Sandbox Code Playgroud)
小智 21
适用于GNU和BSD日期的简短替代方案是:
date -u +%FT%T%z
Run Code Online (Sandbox Code Playgroud)
slm*_*slm 15
coreutils包提供GNU版本的工具.安装:
$ brew install coreutils
Run Code Online (Sandbox Code Playgroud)
你可以看到提供的内容:
$ brew list coreutils
Run Code Online (Sandbox Code Playgroud)
请注意它附带日期:
$ brew list coreutils | grep date
Run Code Online (Sandbox Code Playgroud)
这是标准的GNU日期命令,因此它将采用-I开关:
$ gdate -I
2016-08-09
Run Code Online (Sandbox Code Playgroud)
只需使用普通date格式选项:
date '+%Y-%m-%d'
Run Code Online (Sandbox Code Playgroud)
编辑:包括时间和UTC,这些是等价的:
date -u -Iseconds
date -u '+%Y-%m-%dT%k:%M:%S%z'
Run Code Online (Sandbox Code Playgroud)
小智 5
进一步考虑其他答案,您可以向 ~/.bashrc 或 ~/.zshrc 添加一个函数来添加日期-I标志:
date() {
if [ "$1" = "-I" ]; then
command date "+%Y-%m-%dT%H:%M:%S%z"
else
command date "$@"
fi
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75375 次 |
| 最近记录: |