R 更改POSIXct对象中的时区
在R中玩dateTimes和timezone可能很棘手。 这里是我的问题:我想更改R 更改POSIXct对象中的时区,r,datetime,R,Datetime,在R中玩dateTimes和timezone可能很棘手。 这里是我的问题:我想更改POSIXct对象上的时区 R) data <- data.frame(x=c(1,2),dateTime=as.POSIXct(c("2010-03-11 03:30:00.432","2010-03-15 03:30:00.432"),format="%Y-%m-%d %H:%M:%S",tz="America/Montreal")) R) data x dateTime 1 1
POSIXct
对象上的时区
R) data <- data.frame(x=c(1,2),dateTime=as.POSIXct(c("2010-03-11 03:30:00.432","2010-03-15 03:30:00.432"),format="%Y-%m-%d %H:%M:%S",tz="America/Montreal"))
R) data
x dateTime
1 1 2010-03-11 03:30:00
2 2 2010-03-15 03:30:00
R) str(data)
'data.frame': 2 obs. of 2 variables:
$ x : num 1 2
$ dateTime: POSIXct, format: "2010-03-11 03:30:00" "2010-03-15 03:30:00"
或
上帝(或其他人)知道为什么它不能与POSIXct
R) data$dateTime2 = as.POSIXct(data$dateTime,tz="Europe/Paris")
R) str(data)
'data.frame': 2 obs. of 3 variables:
$ x : num 1 2
$ dateTime : POSIXct, format: "2010-03-11 03:30:00" "2010-03-15 03:30:00"
$ dateTime2: POSIXct, format: "2010-03-11 03:30:00" "2010-03-15 03:30:00"
我是否需要转换为
字符
并返回到POSIXct
?它不适用于POSIXct
,因为base::as.POSIXct.default
如果它已经是POSIXct
,只返回x
。您可以通过tzone
属性更改时区:
attr(data$dateTime, "tzone") <- "Europe/Paris"
attr(data$dateTime,“tzone”)在lubridate
包中,有一个函数带有_tz
,它改变了时区属性(约书亚所描述的)
还有一个setter函数indexTZ()
也可以这样做:indexTZ(data$dateTime).POSIXct(data$dateTime,tz=“Europe/Paris”)
也可以这样做,但它是一个.Internal函数,所以可能不应该在CRAN包中使用。@DirkEddelbuettel:这是为了更改xts对象的时区,不是POSIXct对象。啊哈!POSIXct和POSIXlt对象具有“tzone”属性,下游进程使用它的方式不同。请注意,如果dateTime
是data.table
列,则应使用setattr(data$dateTime,'tzone',Europe/Paris')
因为attrforce_tz
在lubridate
包中也是一个有用的功能。当您从文件中读取数据并且系统假定某个时区时,此功能非常有用<代码>强制时间
更改时区而不更改时钟时间。
R) data$dateTime2 = as.POSIXct(data$dateTime,tz="Europe/Paris")
R) str(data)
'data.frame': 2 obs. of 3 variables:
$ x : num 1 2
$ dateTime : POSIXct, format: "2010-03-11 03:30:00" "2010-03-15 03:30:00"
$ dateTime2: POSIXct, format: "2010-03-11 03:30:00" "2010-03-15 03:30:00"
attr(data$dateTime, "tzone") <- "Europe/Paris"
dttm <- as.POSIXct("2016-01-01 10:10:10", tz = "UTC")
dttm
[1] "2016-01-01 10:10:10 UTC"
with_tz(dttm, "CET")
[1] "2016-01-01 11:10:10 CET"