ISO 8601格式的当前时间

Fer*_*eia 9 r iso8601

对于日志记录目的,R脚本如何在UTC时区中以此格式获取ISO 8601字符串的当前日期和时间:

2015-12-31T14:26:56.600374+00:00
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

42-*_*42- 18

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"
Run Code Online (Sandbox Code Playgroud)

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

看了http://dotat.at/tmp/ISO_8601-2004_E.pdf后,我看到"基本"格式"时区表示"中没有冒号,但"扩展格式"中有一个冒号.

  • 哦,有道理。尽管如此,`as.POSIXlt` 的“格式”(第三个)参数似乎没有什么区别。更改它,甚至删除时间部分,也没有改变输出。这似乎有效:`strftime(as.POSIXlt(Sys.time(), "UTC"), "%Y-%m-%dT%H:%M:%S%z")`。 (2认同)
  • 对.您的代码是我所做的,除了您省略了中间变量创建.当你使用未命名的参数时,使用位置匹配,所以当我们给它一个数值时,它将该格式与`as.POSIXlt.POSIXct`函数的"..."参数匹配.无论如何,它基本上忽略了它.它不会传递给内部函数. (2认同)

Enr*_*ero 6

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

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