这应该很快 - 我们在 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
。
%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"
.
你没有字符串替换。
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
.
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")