强制时区后将时间转换为 POSIX
Converting time to POSIX after forcing time zone
我有时间向量:
library(lubridate)
> test
[1] "2018-01-13 22:23:00 UTC" "2018-01-13 22:23:00 UTC" "2018-01-13 22:23:00 UTC" "2018-01-13 22:23:00 UTC"
[5] "2018-01-13 22:23:00 UTC" "2018-01-13 22:23:00 UTC"
所有 class POSIX:
> class(test)
[1] "POSIXct" "POSIXt"
但是当我强制转换时区时:
test <- format(force_tz(test, tz = 'UTC'), tz ='America/Los_Angeles', usetz=TRUE)
这也将时间向量强制转换为无法转换回 POSIX 的字符 class。
> class(test)
[1] "character"
as.POSIXct(test, format = "%Y-%m-%d HH:MM:SS")
[1] NA NA NA NA NA NA
这可能是什么问题?更改时区并保留 POSIX class 的解决方法是什么?
您应该只使用 force_tz
而没有 运行 到 format
的结果。 force_tz
进行时区转换,然后 format
将其转换为字符:
converted = force_tz(test, tz ='America/Los_Angeles')
输出:
> converted
[1] "2018-01-13 22:23:00 PST" "2018-01-13 22:23:00 PST"
"2018-01-13 22:23:00 PST" "2018-01-13 22:23:00 PST"
> class(converted)
[1] "POSIXct" "POSIXt"
如果您需要转换时区(这不是 force_tz
所做的),请使用 with_tz
:
> with_tz(test, tz = 'America/Los_Angeles')
[1] "2018-01-13 14:23:00 PST" "2018-01-13 14:23:00 PST"
"2018-01-13 14:23:00 PST" "2018-01-13 14:23:00 PST"
基于 lubridate
的答案使用 with_tz
ss <- strptime(test,format = "%Y-%m-%d %H:%M:%S", tz = 'UCT')
lubridate::with_tz(ss, "America/Los_Angeles")
输出:
> test <- "2018-01-13 22:23:00 UTC"
> ss <- strptime(test,format = "%Y-%m-%d %H:%M:%S", tz = 'UCT')
> lubridate::with_tz(ss, "America/Los_Angeles")
[1] "2018-01-13 14:23:00 PST"
请注意,我使用了 strptime,因为我的输入是文本,但在您的情况下,您只需使用 with_tz
我有时间向量:
library(lubridate)
> test
[1] "2018-01-13 22:23:00 UTC" "2018-01-13 22:23:00 UTC" "2018-01-13 22:23:00 UTC" "2018-01-13 22:23:00 UTC"
[5] "2018-01-13 22:23:00 UTC" "2018-01-13 22:23:00 UTC"
所有 class POSIX:
> class(test)
[1] "POSIXct" "POSIXt"
但是当我强制转换时区时:
test <- format(force_tz(test, tz = 'UTC'), tz ='America/Los_Angeles', usetz=TRUE)
这也将时间向量强制转换为无法转换回 POSIX 的字符 class。
> class(test)
[1] "character"
as.POSIXct(test, format = "%Y-%m-%d HH:MM:SS")
[1] NA NA NA NA NA NA
这可能是什么问题?更改时区并保留 POSIX class 的解决方法是什么?
您应该只使用 force_tz
而没有 运行 到 format
的结果。 force_tz
进行时区转换,然后 format
将其转换为字符:
converted = force_tz(test, tz ='America/Los_Angeles')
输出:
> converted
[1] "2018-01-13 22:23:00 PST" "2018-01-13 22:23:00 PST"
"2018-01-13 22:23:00 PST" "2018-01-13 22:23:00 PST"
> class(converted)
[1] "POSIXct" "POSIXt"
如果您需要转换时区(这不是 force_tz
所做的),请使用 with_tz
:
> with_tz(test, tz = 'America/Los_Angeles')
[1] "2018-01-13 14:23:00 PST" "2018-01-13 14:23:00 PST"
"2018-01-13 14:23:00 PST" "2018-01-13 14:23:00 PST"
lubridate
的答案使用 with_tz
ss <- strptime(test,format = "%Y-%m-%d %H:%M:%S", tz = 'UCT')
lubridate::with_tz(ss, "America/Los_Angeles")
输出:
> test <- "2018-01-13 22:23:00 UTC"
> ss <- strptime(test,format = "%Y-%m-%d %H:%M:%S", tz = 'UCT')
> lubridate::with_tz(ss, "America/Los_Angeles")
[1] "2018-01-13 14:23:00 PST"
请注意,我使用了 strptime,因为我的输入是文本,但在您的情况下,您只需使用 with_tz