ISO 8601 格式的当前时间

Current time in ISO 8601 format

出于日志记录的目的,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"

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

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

as.POSIXlt的第三个参数,format,当第一个参数是需要解析的类字符串值时使用。由于我们从 Sys.time 传递日期值,format 被忽略。

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

查看 http://dotat.at/tmp/ISO_8601-2004_E.pdf 后,我发现“基本”格式的时区表示中没有冒号,但“扩展格式”中有冒号。

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

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