【问题标题】:convert character string with timezone to date in r将带有时区的字符串转换为r中的日期
【发布时间】:2026-01-19 07:40:02
【问题描述】:

我有一个字符串向量,看起来像这样。我想将它们转换为日期。时区的字符造成了麻烦。

> 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" 等应用正确的时区。还有其他方法吗?解决这个?

【问题讨论】:

    标签: r datetime timezone strptime


    【解决方案1】:

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

    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 参数设置不同的时区。

    【讨论】: