结合POSIXct给错误的时间

时间:2018-10-05 16:13:16

标签: r time concatenation 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"

为什么会这样?有其他建议吗?

谢谢!

1 个答案:

答案 0 :(得分:5)

c.POSIXct删除时区属性。来自?c.POSIXct

  

在“ c”对象上使用POSIXct [...]会删除所有“ tzone”属性(即使它们都标记有相同的时区)。

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

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) for POSIXct objects with tzone attributes?

“如果所有时间点都{@ {1}} 对象,但是主要问题是c()被记录为可删除 属性:

  

c()有时由于其删除属性的副作用而使用         除了名称,例如将数组变成向量。         c是一种更直观的方法,但也会删除         名称。还要注意,默认方法以外的方法都不是         这样做(他们几乎肯定会保留         类属性)。

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

但是无论如何,文档(as.vector)很清楚:

  

在“ ?c.POSIXct”对象上使用c会将其转换为当前时间         区域,然后在“ POSIXlt”对象上放置所有“ POSIXct”属性         (即使它们都标有相同的时区)。

因此,如果您知道什么,建议的方法是添加“ tzone”属性 你想成为。 tzone个对象是绝对时间:时区 只会影响它们的转换方式(包括打印字符)。”


noted by @aosmith一样,POSIXct可以作为解决方法:

how to retain time zone when doing c(POSIXct)

相关问题