2012-11-19 4 views
77

Sto pianificando ed eseguendo calcoli su serie temporali uniformemente distribuite. I timestamp sono attualmente memorizzati come numeri interi che rappresentano il numero di secondi dall'epoca UNIX (ad esempio 1352068320), ma gli oggetti Date sembrano più appropriati per la stampa. Come posso fare la conversione?Converti UNIX epoca ad oggetto Data

Ho letto ?Date, ?as.Date e ??epoch, ma sembra che abbia perso quell'informazione.

risposta

136

Vai via POSIXct e si desidera impostare un TZ là - qui si vede il mio (Chicago) di default:

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> 

Edit: Pochi anni dopo, possiamo ora utilizzare il pacchetto anytime:

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

nota come tutto questo funziona senza qualsiasi formato o argomenti di origine.

+7

I timestamp sono come '1415560016876'. http://www.epochconverter.com/ converte questo in una data senza problemi. Il tuo codice sopra mi dà cose come '" 46832-11-09 12:47:33 EDT "' ... –

+20

Prova a dividerlo per 1000: 'as.POSIXct (1415560016876/1000, origine =" 1970-01-01 ") "gets" 2014-11-09 13: 06: 56.875 CST "e devi assicurarti che _secondi_ siano attesi (come per R) o _milliseconds_. –

+1

Questo ha fatto il trucco, grazie mille! –