答案1
date
该选项于 1999 年(4 月 8 日)在 coreutils(可能就是您所拥有的)中引入。
该文档已被删除于2005年提交中没有太多解释。
在2011年,重新引入了 --iso-8601 的帮助,并进行了以下解释:
We deprecated and undocumented the --iso-8601 (-I) option mostly
because date could not parse that particular format. Now that
it can, it's time to restore the documentation.
* src/date.c (usage): Document it.
* doc/coreutils.texi (Options for date): Reinstate documentation.
Reported by Hubert Depesz Lubaczewski in http://bugs.gnu.org/7444.
看起来该帮助在 5.90 版本中被删除,并在 8.15 版本中放回(它不在我的 8.13 中),上面的评论表明它现在又回来了,并且不太可能很快消失。
在版本 8.31(由 Solus 2020 年 7 月提供)中,手册页有以下两个选项:
-I[FMT], --iso-8601[=FMT]
output date/time in ISO 8601 format. FMT='date' for date only (the default), 'hours', 'minutes', 'sec‐
onds', or 'ns' for date and time to the indicated precision. Example: 2006-08-14T02:34:56-06:00
--rfc-3339=FMT
output date/time in RFC 3339 format. FMT='date', 'seconds', or 'ns' for date and time to the indicated
precision. Example: 2006-08-14 02:34:56-06:00
答案2
对于一个独立的平台,(几乎)完全兼容, ISO 8601 日期,使用这个:
date +"%Y-%m-%dT%H:%M:%S%z"
这将导致如下时间:2021-01-16T23:09:44-0500
这应该适用于 macOS (BSD) 和 Linux。
从技术上来说,对于满的合规性,应该是:
date +"%Y-%m-%dT%H:%M:%S%:z"
请注意偏移量(时区)字段包含冒号“ :
”之间' %
'和' z
'。 这将导致完全投诉 ISO 8601 时间如:2021-01-16T23:09:44-05:00
但是这个不在 macOS 上工作(截至撰写本文时)。这应该可以在 Linux 上运行(即使用 GNU date
)。
为了世界标准时间时间(零偏移,历史上称为“祖鲁时间”),您可以使用(注意-u
, 来获取 UTC 时间,并注意 ' Z
' 是不是前面有一个“ %
”(或冒号)——它是一个文字“ Z
”):
date -u +"%Y-%m-%dT%H:%M:%SZ"
这将导致如下时间:2021-01-17T04:16:14Z
答案3
--help 最近实际上得到了更新,所以该选项肯定不会消失:
-I[FMT], --iso-8601[=FMT] output date/time in ISO 8601 format.
FMT='date' for date only (the default),
'hours', 'minutes', 'seconds', or 'ns'
for date and time to the indicated precision.
Example: 2006-08-14T02:34:56-06:00
-R, --rfc-2822 output date and time in RFC 2822 format.
Example: Mon, 14 Aug 2006 02:34:56 -0600
--rfc-3339=FMT output date/time in RFC 3339 format.
FMT='date', 'seconds', or 'ns'
for date and time to the indicated precision.
Example: 2006-08-14 02:34:56-06:00
请注意,由于 coreutils-8.27--rfc-2822
已被弃用,有利于更通用的--rfc-email
-R, --rfc-email output date and time in RFC 5322 format.
Example: Mon, 14 Aug 2006 02:34:56 -0600
答案4
我认为这是完美的,也许你也会喜欢它:
date -u --iso-8601=ns | sed s/+00:00/Z/ | sed s/,/./
结果示例:2022-12-10T20:44:36.753578818Z