Converti epoca UNIX in oggetto Date


118

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

Ho letto ?Date, ?as.Datee ??epoch, ma sembra che mi sia sfuggito quell'informazione.

Risposte:


220

Vai via POSIXcte vuoi impostare un TZlì - qui vedi il mio (Chicago) predefinito:

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> 

Modifica: alcuni anni dopo, ora possiamo 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 funziona tutto questo senza alcun formato o argomento di origine .


10
Ho timestamp come 1415560016876. epochconverter.com converte questo in una data senza problemi. Il tuo codice sopra mi dà cose come "46832-11-09 12:47:33 EDT"...
Hack-R

29
Prova a dividerlo per 1000: as.POSIXct(1415560016876/1000, origin="1970-01-01")ottiene "2014-11-09 13: 06: 56.875 CST" e devi assicurarti se sono previsti secondi (come per R) o millisecondi .
Dirk Eddelbuettel

2
@ Shambho: fai il contrario e vedi se sei nello stesso ordine di grandezza:print(as.numeric(Sys.time()))
Dirk Eddelbuettel

2
È sempre lo stesso: scala quello che devi che arrivi alla stessa scala dell'ora corrente: print(as.numeric(Sys.time()), digits=16)con le sei cifre è quello che il mio sistema Linux. Inoltre, puoi dividere per 1000; questo non viene troncato.
Dirk Eddelbuettel

1
Come estraresti solo l'ora locale dalla variabile R e scaricheresti la data?
Stratix

17

In library(lubridate), le rappresentazioni numeriche della data e dell'ora salvate come numero di secondi dal 1970-01-01 00:00:00 UTC, possono essere coerenti in date con as_datetime():

lubridate::as_datetime(1352068320)

[1] "2012-11-04 22:32:00 UTC"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.