【问题标题】:Converting timestamp/Zone to R datetime将时间戳/区域转换为 R 日期时间
【发布时间】:2019-03-27 16:05:15
【问题描述】:

我有以下时间戳: "03-APR-06 12.41.00.000000000 PM US/CENTRAL" 并需要将其转换为与 R 兼容的时间戳。

我试过了:

structure(df2$ACTION_IN_DTTM_TZ,class=c('POSIXct'))
parse_date_time(df2$ACTION_IN_DTTM_TZ, "abdHMSzY")
strptime(df2$ACTION_IN_DTTM_TZ,format='%d/%b/%Y:%H:%M:%S:%p:%Z')

它们都生成了 NAs

structure(df2$ACTION_IN_DTTM_TZ,class=c('POSIXct'))
parse_date_time(df2$ACTION_IN_DTTM_TZ, "abdHMSzY")
strptime(df2$ACTION_IN_DTTM_TZ,format='%d/%b/%Y:%H:%M:%S:%p:%Z')

我想要这样: 2012-08-10 04:42:47

非常感谢任何建议!谢谢!

【问题讨论】:

    标签: r timestamp-with-timezone


    【解决方案1】:

    我做了类似的事情:

    a <-  "03-APR-06 12.41.00.000000000 PM US/CENTRAL"
    b <- (substr(a,1,18))
    c <- as.POSIXct(b,format='%d-%b-%y %H.%M.%S')
    

    【讨论】:

    • 嗨,彼得罗,谢谢!!
    【解决方案2】:

    包lubridate为此提供了功能。我用一个简单的 str_extract 命令提取了时区。

    library(lubridate)
    library(stringr)
    timestamp <- "03-APR-06 12.41.00.000000000 PM US/CENTRAL"
    as_datetime(timestamp,tz=str_extract(timestamp,"\\S*$"))
    [1] "2003-04-06 00:41:00 CST"
    
    #without lubridate
    strptime(strsplit(timestamp," \\S*$")[[1]][1],format="%y-%b-%d %I.%M.%S.%OS %p",tz=str_extract(timestamp,"\\S*$"))
    

    【讨论】:

    • 当我使用它时出现以下错误:C_force_tz(time, tz = tzone, roll) 中的错误:CCTZ: Unrecognized output timezone: "US/CENTRAL"
    • 非常有趣,对我来说运行没有问题。我正在使用stringr_1.3.1 和lubridate_1.7.4。 //编辑:我刚刚重新启动了我的 R 会话并且只加载了这两个包。它仍然可以正常工作,所以也许尝试重新启动您的会话?
    • 我在一个大集群上运行它..谢谢!
    • 我知道前一段时间 lubridate 中有一个错误,有时会抛出类似的错误。所以也许你的集群上安装了旧版本
    • 我为这个问题编辑了一个基本的解决方案,希望这对你有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 2022-01-08
    • 1970-01-01
    • 2020-10-19
    相关资源
    最近更新 更多