更改时区而不更改实际时间

时间:2017-08-02 20:20:06

标签: r timezone posixct

我遇到与https://stackoverflow.com/questions/15575713/modifying-timezone-of-a-posixct-object-without-changing-the-display相同的问题。但是,我遵循了公认的回复,但我没有得到理想的结果。

dt是一个字符串("2017-07-07 15.46.00")。我需要使用CDT时区("2017-07-07 15:46:00 CDT")将其更改为数据时格式。我可以通过lubridate::ymd_hms来完成,我得到了我想要的结果(lub.dt:" 2017-07-07 15:46:00 CDT")但是对于我的数据集大小来说太慢了。我使用fasttime::fastPOSIXct转换了dt,这非常快,但函数假定输入是在' GMT'。所以我使用了' GMT'输出也可以获得相同的日期时间显示(fast.dt:"2017-07-07 15:46:00 GMT")。最后,我尝试用as.POSIXct更改时区。我使用相同的tz(美国/芝加哥)作为起源和功能,但我得到了这个结果" 2017-07-07 16:46:00 CDT"这是(时间+1)。

library(lubridate)
library(fasttime)
dt <- "2017-07-07 15.46.00"
lub.dt <- ymd_hms(dt, tz = 'America/Chicago')
fast.dt <- fastPOSIXct(dt, tz = 'GMT')
fast.dt.new.tz <- as.POSIXct(x = as.numeric(fast.dt), origin = as.POSIXct("1970-01-01", tz = 'America/Chicago'),tz = 'America/Chicago')

任何人都可以指导我做错了吗?

1 个答案:

答案 0 :(得分:0)

这很混乱。你的问题是坚持(非常好)的快速包,现在试图捏造TZ调整。

我建议反对。你可以随时使用也很快(编译代码,但尝试不同的格式):

R> anytime::anytime("2017-07-07 15.46.00")
[1] "2017-07-07 15:46:00 CDT"
R> 

它的优势在于它可以完成想要的东西:将字符串解释为本地时间,并设置当地时间(芝加哥也适用于我)。