在r中将带有时区的字符串转换为日期

时间:2015-04-14 19:17:16

标签: r datetime timezone strptime

我有一个像这样的字符串向量。我想将它们转换为日期。时区的人物构成了麻烦。

> a
    [1] "07/17/2014 5:01:22 PM EDT" "7/17/2014 2:01:05 PM PDT"  "07/17/2014 4:00:48 PM CDT" "07/17/2014 3:05:16 PM MDT"

如果我使用:strptime(a, "%d/%m/%Y %I:%M:%S %p %Z"),我会[1] NA

如果我省略"%Z"对于时区,并使用此:

strptime(a, "%m/%d/%Y %I:%M:%S %p", tz = "EST5EDT")

[1] "2014-07-17 17:01:22 EDT"

由于我的字符串包含各种时区--PDT,CDT,EDT,MDT,因此我无法将所有时区默认为EST5EDT。要克服的一种方法是将矢量分成每个时区的不同矢量,删除字母PDT / EDT等,并使用strptime - " EST5EDT"来应用正确的时区。 ," CST6CDT"有没有其他方法可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果日期始终是字符向量元素的第一部分,并且始终跟随时间,则可以使用空格分割元素。如果只需要日期:

dates <- sapply(a, function(x) strsplit(x, split = " ")[[1]][1])
dates <- as.Date(as.character(dates), format = "%m/%d/%Y")
[1] "2014-07-17" "2014-07-17" "2014-07-17" "2014-07-17"

如果还需要时间:

datetime <- sapply(a, function(x) paste(strsplit(x, split = " ")[[1]][1:3], 
                                 collapse = " "))
datetime <- strptime(as.character(datetime), format = "%m/%d/%Y %I:%M:%S %p")
[1] "2014-07-17 17:01:22 CEST" "2014-07-17 14:01:05 CEST"

您可以在此处使用tz参数设置不同的时区。