r - 在不改变显示的情况下修改 POSIXct 对象的时区

标签 r timezone posixct

我有一个 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/

相关文章:

r - LaTeX 中 tikzDevice 和 ggplot2 生成的标题和图形之间的空白过多

java - 获取设备的本地时区

r - 从一年中的第几周获取月份

php - 如何在服务器上保持本地时间(使用 JS 和 PHP)?

r - 如何正确转换时区

r - 将 POSIXct 日期时间转换为日期时出现意外日期 - 时区问题?

python - 在 Python 中创建阈值编码的 ROC 图

r - .swf 由 knitr 和 hook_r2swf 重叠创建

r - 从Office 365将CSV数据导入R

javascript - Java Date 时区打印不同年份的不同时区,需要解决方法