如何将UNIX时间(以毫秒为单位)转换为R中的POSIXlt?

时间:2016-02-02 15:56:55

标签: r datetime unix-timestamp

我试图解析值

1454181695067-0800

作为R中的日期时间对象。此值是自纪元以来的毫秒数。

如果我截断我可以解析的值的时区和毫秒部分,即

> as.POSIXlt(1454181695, origin = "1970-01-01")
[1] "2016-01-30 11:21:35 PST"

但是,是否可以在一个函数调用中完成所有操作,包括毫秒并正确处理 -0800 部分?

我更喜欢使用默认的R功能。

1 个答案:

答案 0 :(得分:1)

将时间戳作为字符:

x="1454181695067-0800"

然后用read.fwf拆分并构造:

> bits = read.fwf(textConnection(x),widths=c(10,3,1,2,2))
> as.POSIXlt(bits$V1+bits$V2/1000, origin="1970-01-01") + ifelse(bits$V3=="-",-1,1)* (bits$V4*60*60+bits$V5*60)
[1] "2016-01-30 11:21:35 GMT"

虽然毫秒没有显示,但它们在那里。如果你打电话给那件事t0,那么:

> as.numeric(t0 - as.integer(t0))
[1] 0.06699991