繁体   English   中英

强制时区后将时间转换为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"

所有的POSIX类:

> class(test)
[1] "POSIXct" "POSIXt" 

但是,当我强制转换时区时:

test <- format(force_tz(test, tz = 'UTC'), tz ='America/Los_Angeles', usetz=TRUE)

这也将时间向量强制为无法转换回POSIX的字符类。

> class(test)
[1] "character"
as.POSIXct(test, format = "%Y-%m-%d HH:MM:SS")
[1] NA NA NA NA NA NA

这可能是问题所在,更改时区和保留POSIX类的解决方法是什么?

您应该只使用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"

使用with_tz lubridate基于答案的答案

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM