在R中解析ISO8601日期和时间格式

时间:2013-04-05 16:06:24

标签: r datetime

这应该很快 - 我们在R中解析以下格式:

2013-04-05T07:49:54-07:00

我目前的方法是

require(stringr) 
timenoT <- str_replace_all("2013-04-05T07:49:54-07:00", "T", " ") 
timep <- strptime(timenoT, "%Y-%m-%d %H:%M:%S%z", tz="UTC")

但它提供了NA

3 个答案:

答案 0 :(得分:14)

%z是以小时为单位的签名偏移量,格式为hhmm,而不是hh:mm。这是删除最后一个:的一种方法。

newstring <- gsub("(.*).(..)$","\\1\\2","2013-04-05T07:49:54-07:00")
(timep <- strptime(newstring, "%Y-%m-%dT%H:%M:%S%z", tz="UTC"))
# [1] "2013-04-05 14:49:54 UTC"

另请注意,您不必删除"T"

答案 1 :(得分:1)

你没有替换字符串。

NA只是意味着整体不起作用,所以要构建你的表达方式:

R> strptime("2013-04-05T07:49:54-07:00", "%Y-%m-%d") 
[1] "2013-04-05"
R> strptime("2013-04-05T07:49:54-07:00", "%Y-%m-%dT%H:%M") 
[1] "2013-04-05 07:49:00"
R> strptime("2013-04-05T07:49:54-07:00", "%Y-%m-%dT%H:%M:%S")
[1] "2013-04-05 07:49:54" 
R>

另外,由于我从未完全理解的原因 - 但可能存在于其下面的C库函数,%z仅适用于输出,而不适用于输入。因此,您的NA很可能来自您使用%z

答案 2 :(得分:-1)

strptime("2013-04-05 07:49:54-07:00", "%Y-%m-%d %H:%M:%S", tz="UTC")提供2013-04-05 07:49:54 UTC

尝试

timep <- strptime(timenoT, "%Y-%m-%d %H:%M:%S", tz="UTC")