2015-04-08 83 views
3

进行日志记录,如何能的R脚本获取当前日期和时间,在UTC时区,为ISO 8601字符串格式为:在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" 

回答

7

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后,我看到有处于“基本”格式没有冒号”时区代表,但有一个在‘扩展格式’。

+0

哦,有道理尽管如此,“格式化”的'as.POSIXlt'似乎并不有所作为改变它(3)参数,即使去除时间部分,没有改变输出,这似乎工作:'strftime(as.POSIXlt(Sys.time(),“UTC”),“%Y-%m-%dT%H:%M:%S %z“)'。 –

+2

对。你的代码是我做的,除了你省略了中间变量的创建。当你使用未命名的参数时,我们使用了位置匹配,所以当我们给它一个数值时,它将该格式与'as.POSIXlt.POSIXct'函数的“...”参数相匹配。无论如何,它基本上忽略了它。它不会传递给内部函数。 –

0

parsedate识别并分析各种格式的日期包括所有ISO 8601格式:。

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