我有一个 POSIXct
对象并想将其更改为 tz
属性 WITHOUT R 来解释它(解释它意味着改变日期时间在屏幕上的显示方式)。
一些背景:我正在使用 fasttime
来自 S.Urbanek 的包,它接受字符串并将其转换为 POSIXct
很快。问题是该字符串应表示“GMT”中的日期时间,而我的数据并非如此。
我最终得到一个 POSIXct
对象 tz=GMT
,实际上是tz=GMT+1
, 如果我改变时区
attr(datetime, "tzone") <- "Europe/Paris";
datetime <- .POSIXct(datetime,tz="Europe/Paris");
那么它将“显示”为
GMT+2
(基础值(value)永远不会改变)。编辑:这是一个例子
datetime=as.POSIXct("2011-01-01 12:32:23.234",tz="GMT")
attributes(datetime)
#$tzone
#[1] "GMT"
datetime
#[1] "2011-01-01 12:32:23.233 GMT"
如何在没有 R 的情况下更改此属性来解释它又名如何更改 tzone 并且仍然将日期时间显示为
"2011-01-01 12:32:23.233"
?编辑/解决方案,@GSee 的解决方案相当快,lubridate::force_tz 非常慢
datetime=rep(as.POSIXct("2011-01-01 12:32:23.234",tz="GMT"),1e5)
f <- function(x,tz) return(as.POSIXct(as.numeric(x), origin="1970-01-01", tz=tz))
> system.time(datetime2 <- f(datetime,"Europe/Paris"))
user system elapsed
0.01 0.00 0.02
> system.time(datetime3 <- force_tz(datetime,"Europe/Paris"))
user system elapsed
5.94 0.02 5.98
identical(datetime2,datetime3)
[1] TRUE
最佳答案
更改 tz
POSIXct
的属性变量 转换为字符或数字然后返回 POSIXct
不是最佳做法.相反,您可以使用 force_tz
lubridate
的功能包裹
library(lubridate)
datetime2 <- force_tz(datetime, tzone = "CET")
datetime2
attributes(datetime2)
关于r - 在不改变显示的情况下修改 POSIXct 对象的时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575713/