Converter época UNIX em objeto Date

118

Estou traçando e realizando cálculos em séries temporais uniformemente distribuídas. Os carimbos de data / hora são armazenados atualmente como inteiros que representam o número de segundos desde a época do UNIX (por exemplo 1352068320), mas os Dateobjetos parecem mais apropriados para plotagem. Como posso fazer a conversão?

Eu li ?Date, ?as.Datee ??epoch, mas pareço não ter percebido essa informação.

Andreas
fonte

Respostas:

220

Vá via POSIXcte você deseja definir um TZlá - aqui você vê meu padrão (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> 

Edit: Alguns anos depois, agora podemos usar o pacote anytime :

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

Observe como tudo isso funciona sem qualquer formato ou argumentos de origem .

Dirk Eddelbuettel
fonte
10
Eu tenho timestamps como 1415560016876. epochconverter.com converte isso em uma data sem problemas. Seu código acima me dá coisas como "46832-11-09 12:47:33 EDT"...
Hack-R
29
Tente dividir isso por 1000: as.POSIXct(1415560016876/1000, origin="1970-01-01")obtém "2014-11-09 13: 06: 56.875 CST" e você precisa garantir se os segundos são esperados (como para R) ou milissegundos .
Dirk Eddelbuettel de
2
@Shambho: Faça o inverso e veja se você está na mesma ordem de magnitude:print(as.numeric(Sys.time()))
Dirk Eddelbuettel
2
É sempre igual: dimensione o que você tem para que chegue na mesma escala da hora atual: print(as.numeric(Sys.time()), digits=16)com os seis dígitos está o meu sistema Linux. Além disso, você pode dividir por 1000; isso não trunca.
Dirk Eddelbuettel
1
Como você extrairia apenas a hora local da variável R e descartaria a data?
Stratix de
17

Em library(lubridate), as representações numéricas de data e hora salvas como o número de segundos desde 01/01/1970 00:00:00 UTC podem ser coerentes em datas com as_datetime():

lubridate::as_datetime(1352068320)

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