我有一个尝试使用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"
为什么会这样?有其他建议吗?
谢谢!
答案 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
可以作为解决方法: