ISO 8601格式的当前时间

时间:2015-04-08 14:43:16

标签: r iso8601

为了记录日志,R脚本如何在UTC时区中以当前格式获取ISO 8601字符串:

2015-12-31T14:26:56.600374+00:00

as.POSIXlt似乎是解决方案,文档声称它接受格式参数,但我无法做到这一点(在R版本3.1.3上):

> as.POSIXlt(Sys.time(), "UTC", "%Y-%m-%dT%H:%M:%S")
[1] "2015-04-08 14:37:58 UTC"
> as.POSIXlt(Sys.time(), tz="UTC", format="%Y-%m-%dT%H:%M:%S")
[1] "2015-04-08 14:38:02 UTC"
> as.POSIXct(Sys.time(), tz="UTC", format="%Y-%m-%dT%H:%M:%S")
[1] "2015-04-08 11:38:22 BRT"

2 个答案:

答案 0 :(得分:16)

as.POSIXlt(和as.POSIXct)用于输入。使用formatstrftime输出。有关格式字符串的详细信息,请参阅?strftime:

 tm <- as.POSIXlt(Sys.time(), "UTC", "%Y-%m-%dT%H:%M:%S")
 strftime(tm , "%Y-%m-%dT%H:%M:%S%z")
#[1] "2015-04-08T15:11:22+0000"

我不认为时区输出中的冒号是ISO 8601格式的要求,但我在这一点上可能是错的。帮助页面说标准是POSIX 1003.1。如果需要,可能需要用正则表达式替换结肠。

在看http://dotat.at/tmp/ISO_8601-2004_E.pdf后,我发现&#34;基本&#34;中没有冒号。格式&#34;时区表示,但有一个扩展格式&#34;。

答案 1 :(得分:4)

parsedate以各种格式识别和解析日期,包括所有ISO 8601格式:

format_iso_8601(Sys.time())
# [1] "2017-09-01T10:59:22+00:00"