在R中玩dateTimes和timezone可能很棘手.

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"

但如果我想改变时区,我唯一能找到的是:

R) data$dateTime2 = format(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: chr  "2010-03-11 09:30:00" "2010-03-15 08:30:00"

R) data$dateTime2 = as.POSIXlt(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: POSIXlt, format: "2010-03-11 09:30:00" "2010-03-15 08:30:00"

god (或是其他人)知道为什么它对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"

我需要转换成character然后再转换回POSIXct吗?

推荐答案

它不适用于POSIXct,因为如果base::as.POSIXct.default已经是POSIXct,它只返回x.您可以通过tzone属性更改时区:

attr(data$dateTime, "tzone") <- "Europe/Paris"

R相关问答推荐

for循环和if else在R中

pivot_longer:names_to和names_pattern

feature_weights参数没有影响Xgboost

如何将图案添加到ggplot中的一个类别

如何使用ggplot重新绘制LASO回归图?

从API中抓取R数据SON

R创建一个数据透视表,计算多个组的百分比

将复杂的组合列表转换为数据框架

多重RHS固定估计

计算满足R中条件的连续列

R:从geom_ol()中删除轮廓并导出为pdf

R Select()可以测试不存在的子集列

在不丢失空值的情况下取消列出嵌套列表

如何从容器函数中提取conf并添加到ggplot2中?

如何根据数据帧中的值从该数据帧中提取值?

如何删除R中除数字元素以外的所有元素

计算Mean by分组和绑定到R中的数据集

如何判断代码是否在R Markdown(RMD)上下文中交互运行?

如何在内联代码中添加额外的空格(R Markdown)

在ggplot2图表中通过端点连接点