这已经使我有一段时间了。我有一列这样的日期时间字符串:
"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中了?
答案 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存储为字符值,然后再发送到strptime
或as.POSIXct
,因为您已经在期待。