【发布时间】:2017-08-02 20:20:06
【问题描述】:
我和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')
谁能指导我做错了什么?
【问题讨论】:
-
试试这个:
as.POSIXct(dt,"%Y-%m-%d %H.%M.%S", tz = 'CST6CDT')。 CST6CDT 应提供正确的 CST 或 CDT 时区。 -
感谢您的建议。 'as.POSIXct' 比 'lubridate' 函数快,但它不适用于我的数据集。这个post 比较了不同的解析方法。