首页 文章

如何让as.POSIXct不改变字符串的时区?

提问于
浏览
1

这一直引起我的问题 . 我有一列日期时间字符串,如下所示:

"2016-09-13 22:27:37.320 UTC"

我一直试图让他们使用以下方法强制进入POSIXct对象:

library(anytime)
final$contact <- as.POSIXct(anytime(final$contact, tz="UTC"))

但它给了我时间,好像我将它从我的本地时区(EST)转换为UTC,尽管我在字符串中包含UTC,然后在任何时候指定tz是UTC:

2016-09-14 02:27:37

最终的目标是将它们传递给:

for (i in 1:NROW(final$first_rpc)){
    final$localcontact[i] <- format(final$contact[i],
                                    tz=as.character(final$timezone.x[i]),
                                    usetz = TRUE)
}

这样每次都使用其各自的时区而不是UTC(这是数据存储在我们数据库中的方式) .

这是关于我尝试的第四个版本,我真的不知道如何使它按照我喜欢的方式工作,其中的字符串转换为仍然是UTC的POSIXct对象 . 有没有办法让任何时候/ as.POSIXct意识到这些已经在UTC了?

3 回答

  • 1
    x <- "2016-09-13 22:27:37.320 UTC"
    as.POSIXct(x, format = "%Y-%m-%d %H:%M:%S", tz ='EST')
    [1] "2016-09-13 22:27:37 EST"
    
  • 1

    我认为您需要包含usetz和tz参数才能获得 as.POSIXct 以表示UTC的名称 . %z和%Z格式仅用于输出:

    as.POSIXct(x, format = "%Y-%m-%d %H:%M:%S", usetz=TRUE, tz="UTC")
    #[1] "2016-09-13 22:27:37 UTC"
    

    `随时(来自相同名称的包)使用不同的参数名称:

    anytime::anytime(x, asUTC=TRUE)
    [1] "2016-09-13 15:27:37 PDT"  # value came in as UTC but the default print output is local
    anytime::anytime(x, asUTC=TRUE, tz="UTC")  # overrides local tz conversion
    [1] "2016-09-13 22:27:37 UTC"
    

    与未命名的数据库(可能是本土的)一样,R将所有日期时间对象存储为UTC,并且仅在输出时应用时区指示符 . 如果你有混合的时区,那么你将需要对它们进行预处理并将相关的源TZ存储为字符值,然后再发送到 strptimeas.POSIXct ,正如您所预期的那样 .

  • 2

    我们不需要在这里指定 format ,因为它已经是 Date Time 格式

    as.POSIXct(str1, tz = "UTC")
    #[1] "2016-09-13 22:27:37 EDT"
    

    数据

    str1 <- "2016-09-13 22:27:37.320 UTC"
    

相关问题