Datetime 将unix秒(毫秒)转换为POSIXct/POSIXlt

Datetime 将unix秒(毫秒)转换为POSIXct/POSIXlt,datetime,r,Datetime,R,为什么在R中将unix时间戳转换为datetime对象时会看到差异 > as.POSIXlt(1268736919, origin="1970-01-01", tz="America/New_York") [1] "2010-03-16 06:55:19 EDT" > as.POSIXct(1268736919, origin="1970-01-01", tz="America/New_York") [1] "2010-03-16 11:55:19 EDT" POSIXlt的结果

为什么在R中将unix时间戳转换为datetime对象时会看到差异

> as.POSIXlt(1268736919, origin="1970-01-01", tz="America/New_York")
[1] "2010-03-16 06:55:19 EDT"

> as.POSIXct(1268736919, origin="1970-01-01", tz="America/New_York")
[1] "2010-03-16 11:55:19 EDT"
POSIXlt的结果实际上是正确的

还有,有没有一种方法可以在不指定原点的情况下进行转换


谢谢

帮助页面实际上暗示了一个不同之处:

Value:

     ‘as.POSIXct’ and ‘as.POSIXlt’ return an object of the appropriate
     class.  If ‘tz’ was specified, ‘as.POSIXlt’ will give an
     appropriate ‘"tzone"’ attribute.
这东西很挑剔——我认为
as.POSIXct
会发生隐式的TZ转换。认为

R> print(as.numeric(as.POSIXct(as.POSIXlt(1268736919, 
                               origin="1970-01-01"))), digits=10)
[1] 1268736919
R> print(as.numeric(as.POSIXct(1268736919, origin="1970-01-01")), digits=10)
[1] 1268758519
第二个(使用
as.POSIXct
)不返回原始输入。不幸的是,Brian D.Ripley似乎是唯一一个掌握所有细节的人


最后,你不能没有原点。但您可以定义使用纪元作为原点(如此处所示)或使用2000-01-01或。。。保持一致。

Dirk-谢谢你的解释。那你建议我在这里做什么?我有一个完整的带有unix时间戳的时间序列数据集。我希望使用xts来表示它们。我也一直这样做(当从内部数据仓库连接数据时),我只接受
作为。POSIXct(vecOfTimestamps)
将获得本地时间值。看看我们在这里找到的内容,首先通过
as.POSIXlt
作为额外的步骤可能会有所帮助。我还写了一个适当的C++表示作为Rcpp的一个todo-item。谢谢,现在我将接受你的建议去做额外的步骤。当我有机会的时候,可以更深入地研究的东西。是否有一个R bug跟踪器可以发布此信息?从R-devel档案开始(可能通过rseek.org和列表选项卡)。也许有一个解决办法我已经忘记了。