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