r语言 - 组合 POSIXct 给出错误的时间



我有一个日期列表,我试图在Reduce上使用它,并意识到当我组合向量时,小时数正在改变。下面是一个示例:

x = structure(1315714440, tzone = "UTC", class = c("POSIXct", "POSIXt"))
y = structure(1325832660, tzone = "UTC", class = c("POSIXct", "POSIXt"))
x
[1] "2011-09-11 04:14:00 UTC"
y
[1] "2012-01-06 06:51:00 UTC"
c(x,y)
[1] "2011-09-11 00:14:00 EDT" "2012-01-06 01:51:00 EST"

为什么会这样?关于替代方案的任何建议?

谢谢!

>c.POSIXct删除时区属性。从?c.POSIXct

在"POSIXct"对象上使用c[...]会删除任何"tzone"属性(即使它们都用相同的时区标记(。

因此,按照您的c(x,y),您可以使用attr恢复原始UTC时区:

xy <- c(x, y)
attr(xy, "tzone") <- "UTC"
xy
# [1] "2011-09-11 04:14:00 UTC" "2012-01-06 06:51:00 UTC" 

Ripley的更多背景在这里:

c(a, b( 对于具有 tzone 属性的 POSIXct 对象?

"我们考虑c()保留时区,如果它对所有人来说都是共同的 对象,但主要问题是记录了c()以删除 属性:

c有时用于删除属性的副作用 除了名称,例如将数组转换为向量。as.vector是一种更直观的方法来做到这一点,但也会下降 名字。 另请注意,默认方法以外的方法不是 需要这样做(他们几乎肯定会保留一个 类属性(。

因此,有时删除并有时保留属性会 令人困惑。

但无论如何,文档(?c.POSIXct(是明确的:

在"POSIXlt"对象上使用c将它们转换为当前时间 区域,并在"POSIXct"对象上删除任何"tzone"属性 (即使它们都用相同的时区标记(。

所以推荐的方法是添加一个"tzone"属性,如果你知道什么 你想要它。POSIXct对象是绝对时间:时区 仅影响它们的转换方式(包括转换为用于打印的字符(。


如@aosmith所述,rbind可以用作解决方法:

做c(POSIXct(时如何保留时区

相关内容

最新更新