Datetime 将unix秒(毫秒)转换为POSIXct/POSIXlt
为什么在R中将unix时间戳转换为datetime对象时会看到差异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的结果
> 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和列表选项卡)。也许有一个解决办法我已经忘记了。