Преобразование секунд Unix в миллисекундах в POSIXct / POSIXlt - PullRequest
18 голосов
/ 16 марта 2010

Почему я вижу разницу при преобразовании метки времени unix в объект datetime в R?

> 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 на самом деле правильный.

Кроме того, есть ли способ сделать это преобразование без указания источника?

Спасибо

1 Ответ

20 голосов
/ 16 марта 2010

Страница справки фактически намекает на разницу:

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) не возвращает исходный ввод. К сожалению, Брайан Д. Рипли, кажется, единственный человек, имеющий все детали здесь.

Наконец, вы не можете сделать это без происхождения. Но вы можете определить оболочки, которые используют эпоху в качестве источника (как здесь) или использовать 2000-01-01 или ... Просто сохраняйте это согласованным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...