该date
命令不提供这种功能,这是令人遗憾的,因为RFC-3339是一种现代,广泛,合理的格式,在各处使用(电子邮件既不是现代的也不是明智的)。
我的时区偏移当前为-08:00,因此此命令最简单的形式应将当前时间打印为2013-09-05T14:58:33.102-08:00
。
2013-09-05 14:58:33.102 -0800
除非出于某种原因根本不能使用空格。
该date
命令不提供这种功能,这是令人遗憾的,因为RFC-3339是一种现代,广泛,合理的格式,在各处使用(电子邮件既不是现代的也不是明智的)。
我的时区偏移当前为-08:00,因此此命令最简单的形式应将当前时间打印为2013-09-05T14:58:33.102-08:00
。
2013-09-05 14:58:33.102 -0800
除非出于某种原因根本不能使用空格。
Answers:
看来您可以使用切换到GNU实现date
(版本5.90或更高版本)的几种格式--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
如果您想T
添加,作为一种技巧:
$ date --rfc-3339=seconds | sed 's/ /T/'
2014-03-19T18:35:03-04:00
如果您想要以毫秒为单位:
$ date --rfc-3339=ns | sed 's/ /T/; s/\(\....\).*\([+-]\)/\1\2/g'
2014-03-19T18:42:52.362-04:00
--iso-8601' option accepts the same arguments as
--rfc-3339`,并且包括在其输出中“T”。
s/\(\....\).*-/\1-/g
应该s/\(\....\).*\([+-]\)/\1\2/g
在大西洋以东工作。
NOTE: ISO 8601 defines date and time separated by "T".
尽管RFC3339允许您改用空格。阅读ietf.org/rfc/rfc3339.txt第5.6节
使用GNU date
(5.90或更高版本):
$ TZ=America/Anchorage date '+%FT%T.%N%:z'
2014-03-19T14:29:31.041119357-08:00
更换%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
GNU date
具有内置的ISO-8601格式-难道与RFC-3339不太接近甚至不相同吗?
1065 % date --iso-8601=seconds
2014-03-19T16:51:16-0600
好的老怎么样:
$ date +%Y-%m-%dT%T%z
2015-10-29T14:47:06+0200
0200
缺少冒号,这可能会破坏某些需要它的系统。
time-numoffset
在tools.ietf.org/html/rfc3339#section-5.6。
您还可以更轻松地根据RFC3339(ISO8601)格式化时间:
$ date -u +"%Y-%m-%dT%H:%M:%SZ"
2016-11-08T08:52:55Z
注意:此格式在标签架构约定RC 1.0中也使用
-u
标志,这个答案是正确的,对吗?
echo "Local date only:"
date '+%Y-%m-%d'
echo
echo "Local date and time:"
date '+%Y-%m-%dT%H:%M:%S%z' | sed 's@^.\{22\}@&:@'
echo
echo "UTC date and time:"
date -u '+%Y-%m-%dT%H:%M:%SZ'
这些命令与POSIX兼容,但%z
转换规范除外。但是,%z
它在Linux,MacOS,FreeBSD,OpenBSD,NetBSD,DragonFlyBSD,Solaris,Minix和Haiku中得到了广泛支持并以相同的方式工作。它还可以与Busybox,Toybox和sbase(suckless.org基本系统实用程序)中的工具一起使用。由于%z
以±HHMM
格式输出时区偏移量,因此我们需要使用sed
管道添加冒号并将其更改为±HH:MM
。
注意:Heirloom项目的date
命令具有不兼容的%z
输出:它不会打印+
符号。