代码之家  ›  专栏  ›  技术社区  ›  svenhalvorson

组合POSIXct给出错误的时间[重复]

  •  4
  • svenhalvorson  · 技术社区  · 6 年前

    我有一份我想用的日期清单 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 回复  |  直到 6 年前
        1
  •  5
  •   Henrik plannapus    6 年前

    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?

    “我们考虑过 c() 如果时区对所有用户都是公用的,则保留该时区 但主要的问题是 c() 记录了要删除的 属性:

    c 有时用于消除属性的副作用 除了名称,例如将数组转换为向量。 as.vector 名字。还要注意的是,默认方法以外的方法是不可用的 必须这样做(他们几乎肯定会保留一个 类属性)。

    所以,有时删除,有时保留属性

    但无论如何,文件( ?c.POSIXct公司

    使用 c POSIXlt “对象将它们转换为当前时间 区域,等等“ POSIXct公司 托内 “属性

    托内 你想要的。 POSIXct公司 只会影响它们的转换方式(包括转换为打印字符)。”


    作为 noted by @aosmith , rbind

    how to retain time zone when doing c(POSIXct)