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

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

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

Спасибо

18
задан signalseeker 16 March 2010 в 18:40
поделиться

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.

Это привередливо - я думаю, что для 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

второй (используя как.POSIXct ) не возвращает исходный ввод. К сожалению, Брайан Д. Рипли, кажется, единственный человек, у которого есть все подробности.

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

20
ответ дан 30 November 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: