该date
命令没有提供这样的东西,这有点令人难过,因为 RFC-3339 是现代、广泛、合理的格式,到处都在使用(除了在既不现代也不健全的电子邮件中)。
我的时区偏移量当前为 -08:00,因此此命令的最简单形式应将当前时间打印为2013-09-05T14:58:33.102-08:00
.
slm*_*slm 39
似乎您可以使用切换到date
(版本 5.90 或更高版本)的 GNU 实现来执行多种格式,--rfc3339=
.
$ date --rfc-3339=date
2014-03-19
$ date --rfc-3339=seconds
2014-03-19 18:00:05-04:00
$ date --rfc-3339=ns
2014-03-19 18:00:08.179780629-04:00
Run Code Online (Sandbox Code Playgroud)
如果你想T
被添加,作为一个黑客:
$ date --rfc-3339=seconds | sed 's/ /T/'
2014-03-19T18:35:03-04:00
Run Code Online (Sandbox Code Playgroud)
如果你想以毫秒为单位:
$ date --rfc-3339=ns | sed 's/ /T/; s/\(\....\).*\([+-]\)/\1\2/g'
2014-03-19T18:42:52.362-04:00
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 20
使用 GNU date
(5.90 或更高版本):
$ TZ=America/Anchorage date '+%FT%T.%N%:z'
2014-03-19T14:29:31.041119357-08:00
Run Code Online (Sandbox Code Playgroud)
更换%N
用%3N
的毫秒,%6N
微秒...
AFAIK,POSIX、Unix 或 LSB 规范都没有指定任何可以以亚秒级粒度显示时间的命令,但小数部分在 RFC 3339 中是可选的。
POSIX/Unix/LSB strftime 支持%z
将 TZ 偏移量显示为-0800
,因此您可能获得的最便携的是:
$ TZ=America/Anchorage perl -MPOSIX -le '$t = strftime "%Y-%m-%dT%T%z",
localtime; $t =~ s/..$/:$&/; print $t'
2014-03-19T14:30:23-08:00
Run Code Online (Sandbox Code Playgroud)
Dan*_*ncă 14
您还可以根据RFC3339 ( ISO8601 )更轻松地格式化时间:
$ date -u +"%Y-%m-%dT%H:%M:%SZ"
2016-11-08T08:52:55Z
Run Code Online (Sandbox Code Playgroud)
注意:此格式也用于标签架构约定 RC 1.0
Era*_*oni 11
好老怎么样:
$ date +%Y-%m-%dT%T%z
2015-10-29T14:47:06+0200
Run Code Online (Sandbox Code Playgroud)
GNUdate
内置了 ISO-8601 格式——这与 RFC-3339 不是很接近甚至完全相同吗?
1065 % date --iso-8601=seconds
2014-03-19T16:51:16-0600
Run Code Online (Sandbox Code Playgroud)