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.

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 .


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"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.