以 RFC-3339 格式打印日期的标准命令是什么?

Mar*_*bon 28 date

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)

参考

  • 现在,不需要 hack 来获得“T”。“--iso-8601”选项接受与“--rfc-3339”相同的参数,并在其输出中包含“T”。 (13认同)
  • @Eonil 这实际上是不正确的,RFC3339 指出:`注意:ISO 8601 定义了由“T”分隔的日期和时间。`虽然 RFC3339 允许您使用空格代替。阅读 https://www.ietf.org/rfc/rfc3339.txt 第 5.6 节 (3认同)
  • @rwenz3l 我的错。我只阅读了 ABNF 部分而错过了笔记。谢谢你指出! (2认同)

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)

  • 在这里快速说明,在不打开 RFC 的情况下,时区段“0200”缺少一个冒号,这可能会破坏一些需要它的系统。 (8认同)
  • @MikeMackintosh 的说明是相关的;此处显示的输出 * 不是 * 合法的 RFC 3339 日期。RFC 3339 需要时区段中的冒号;请参阅 https://tools.ietf.org/html/rfc3339#section-5.6 上的 `time-numoffset` 定义。 (3认同)

Bru*_*ger 9

GNUdate内置了 ISO-8601 格式——这与 RFC-3339 不是很接近甚至完全相同吗?

1065 % date --iso-8601=seconds
2014-03-19T16:51:16-0600
Run Code Online (Sandbox Code Playgroud)