如何获取as.POSIXct不更改字符串的时区?

时间:2018-10-18 16:58:22

标签: r datetime posixct

这已经使我有一段时间了。我有一列这样的日期时间字符串:

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

我一直在尝试使用以下方法将它们强制转换为POSIXct对象:

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

但是,尽管我在字符串中包含了UTC,但它给我的时间就像我将其从本地时区(EST)转换为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对象。有什么方法可以使POSIXct随时随地意识到这些已经存在于UTC中了?

3 个答案:

答案 0 :(得分: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"

答案 1 :(得分: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"

答案 2 :(得分: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,并且仅在输出时应用了时区指示符。如果您混入了时区,则yu将需要对其进行预处理,并将关联的源TZ存储为字符值,然后再发送到strptimeas.POSIXct,因为您已经在期待。