Convertir época de UNIX en objeto de fecha

118

Estoy trazando y realizando cálculos en series de tiempo distribuidas uniformemente. Las marcas de tiempo se almacenan actualmente como números enteros que representan el número de segundos desde la época de UNIX (por ejemplo 1352068320), pero los Dateobjetos parecen más apropiados para trazar. ¿Cómo puedo hacer la conversión?

He leído ?Date,?as.Date y ??epoch, pero parece que han perdido esa información.

Andreas
fuente

Respuestas:

220

Vaya a través POSIXcty desea establecer un TZallí; aquí verá mi valor predeterminado (Chicago):

R> val <- 1352068320
R> as.POSIXct(val, origin="1970-01-01")
[1] "2012-11-04 22:32:00 CST"
R> as.Date(as.POSIXct(val, origin="1970-01-01"))
[1] "2012-11-05" 
R> 

Editar: unos años después, ahora podemos usar el paquete en cualquier momento :

R> library(anytime)
R> anytime(1352068320)
[1] "2012-11-04 16:32:00 CST"
R> anydate(1352068320)
[1] "2012-11-04"
R> 

Observe cómo funciona todo esto sin ningún formato o argumentos de origen .

Dirk Eddelbuettel
fuente
10
Tengo marcas de tiempo como 1415560016876. epochconverter.com convierte esto en una fecha sin problemas. Su código anterior me da cosas como "46832-11-09 12:47:33 EDT"...
Hack-R
29
Intente dividir eso por 1000: as.POSIXct(1415560016876/1000, origin="1970-01-01")obtiene "2014-11-09 13: 06: 56.875 CST" y debe asegurarse de que se esperan segundos (como para R) o milisegundos .
Dirk Eddelbuettel
2
@Shambho: Simplemente haga lo contrario y vea si está en el mismo orden de magnitud:print(as.numeric(Sys.time()))
Dirk Eddelbuettel
2
Siempre es lo mismo: escala lo que tienes para que llegue a la misma escala que la hora actual: print(as.numeric(Sys.time()), digits=16)con los seis dígitos es lo que mi sistema Linux. Además, puede dividir por 1000; esto no se trunca.
Dirk Eddelbuettel
1
¿Cómo extraería solo la hora local de la variable R y volcaría la fecha?
Stratix
17

En library(lubridate), las representaciones numéricas de fecha y hora guardadas como el número de segundos desde 1970-01-01 00:00:00 UTC, se pueden coherir en fechas con as_datetime():

lubridate::as_datetime(1352068320)

[1] "2012-11-04 22:32:00 UTC"
Yuriy Barvinchenko
fuente