Подтвердить что ты не робот

Преобразование секунд unix в миллисекундах в POSIXct/POSIXlt

Почему я вижу разницу, когда я конвертирую временную метку 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 на самом деле правильный.

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

Спасибо

4b9b3361

Ответ 1

Страница справки на самом деле намекает на разницу:

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.

Этот материал полон - я думаю, что существует неявное преобразование TZ для as.POSIXct. Рассмотрим, что

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 или... Просто держите ее в соответствии.