datetime Conversión de segundos Unix en milisegundos a POSIXct/POSIXlt



posixct to date r (1)

¿Por qué veo una diferencia cuando convierto una marca de tiempo Unix a un objeto datetime en 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"

El resultado de POSIXlt es realmente correcto.

Además, ¿hay una manera de hacer esta conversión sin especificar el origen?

Gracias

https://code.i-harness.com


La página de ayuda en realidad apunta a una diferencia:

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.

Esto es delicado: creo que se está produciendo una conversión TZ implícita para as.POSIXct . Considere eso

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

el segundo (usando as.POSIXct ) no devuelve la entrada original. Desafortunadamente, Brian D. Ripley parece ser el único humano que tiene todos los detalles aquí.

Por último, no puedes hacerlo sin el origen. Pero puede definir envoltorios que usen la época como origen (como aquí) o usar el 2000-01-01 o ... Solo manténgalo consistente





r