如何让 as.POSIXct 不改变字符串的时区?
How to get as.POSIXct to not change timezone of string?
这让我困扰了一段时间。我有一列这样的日期时间字符串:
"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(这是我们数据库中数据的存储方式)。
这是我试过的第四个版本,我真的不知道如何让它按照我喜欢的方式工作,上面的字符串被转换成 POSIXct 对象,仍在 UTC 中。有没有办法让 anytime/as.POSIXct 意识到这些已经在 UTC 中了?
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"
我认为您需要同时包含 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 存储为字符值,然后再发送到 strptime
或 as.POSIXct
,正如您已经预料的那样。
我们不需要在这里指定 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"
这让我困扰了一段时间。我有一列这样的日期时间字符串:
"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(这是我们数据库中数据的存储方式)。
这是我试过的第四个版本,我真的不知道如何让它按照我喜欢的方式工作,上面的字符串被转换成 POSIXct 对象,仍在 UTC 中。有没有办法让 anytime/as.POSIXct 意识到这些已经在 UTC 中了?
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"
我认为您需要同时包含 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 存储为字符值,然后再发送到 strptime
或 as.POSIXct
,正如您已经预料的那样。
我们不需要在这里指定 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"