Konvertieren Sie die UNIX-Epoche in ein Datumsobjekt

118

Ich zeichne und führe Berechnungen für gleichmäßig verteilte Zeitreihen durch. Die Zeitstempel werden derzeit als Ganzzahlen gespeichert, die die Anzahl der Sekunden seit der UNIX-Epoche darstellen (z. B. 1352068320), aber DateObjekte scheinen für das Plotten besser geeignet zu sein. Wie kann ich die Konvertierung durchführen?

Ich habe gelesen ?Date, ?as.Dateund ??epoch, scheinen aber zu , dass Informationen übersehen zu haben.

Andreas
quelle

Antworten:

219

Gehen Sie über POSIXctund Sie möchten dort eine festlegen TZ- hier sehen Sie meine (Chicago) Standardeinstellung:

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> 

Bearbeiten: Einige Jahre später können wir jetzt das jederzeitige Paket verwenden:

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

Beachten Sie, wie dies alles ohne Format- oder Ursprungsargumente funktioniert .

Dirk Eddelbuettel
quelle
10
Ich habe Zeitstempel wie 1415560016876. epochconverter.com konvertiert dies problemlos in ein Datum. Ihr Code oben gibt mir Sachen wie "46832-11-09 12:47:33 EDT"...
Hack-R
29
Versuchen Sie, dies durch 1000 zu as.POSIXct(1415560016876/1000, origin="1970-01-01")teilen: Erhält "2014-11-09 13: 06: 56.875 CST" und Sie müssen sicherstellen, ob Sekunden (wie für R) oder Millisekunden erwartet werden .
Dirk Eddelbuettel
2
@Shambho: Machen Sie einfach das Gegenteil und sehen Sie, ob Sie in der gleichen Größenordnung sind:print(as.numeric(Sys.time()))
Dirk Eddelbuettel
2
Es ist immer das Gleiche: Skalieren Sie, was Sie haben, damit es auf dem gleichen Maßstab wie die aktuelle Zeit ankommt : print(as.numeric(Sys.time()), digits=16)Mit den sechs Ziffern ist das, was mein Linux-System ist. Sie können auch durch 1000 teilen. Dies wird nicht abgeschnitten.
Dirk Eddelbuettel
1
Wie würden Sie nur die Ortszeit aus der R-Variablen extrahieren und das Datum ausgeben?
Stratix
17

In library(lubridate)können numerische Darstellungen von Datum und Uhrzeit, die als Anzahl der Sekunden seit 1970-01-01 00:00:00 UTC gespeichert wurden, in Datumsangaben zusammengefasst werden mit as_datetime():

lubridate::as_datetime(1352068320)

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