2012-11-19 6 views
77

Ich zeichne und führe Berechnungen auf gleichmäßig verteilten Zeitreihen durch. Die Zeitstempel werden gegenwärtig als ganze Zahlen gespeichert, die die Anzahl von Sekunden repräsentieren, die seit der UNIX-Epoche verstrichen sind (z. B. 1352068320), aber Date Objekte scheinen eher zum Zeichnen geeignet. Wie kann ich die Konvertierung durchführen?UNIX-Epoche in Date-Objekt konvertieren

Ich habe gelesen ?Date, ?as.Date und ??epoch, aber scheinen diese Informationen verpasst zu haben.

Antwort

136

Go über POSIXct und Sie wollen eine TZ dort einstellen - hier meine (Chicago) default sehen:

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: Einige Jahre später, können wir nun die anytime Paket verwenden:

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

Hinweis, wie das alles funktioniert ohne jedes Format oder Herkunft Argumente.

+7

Ich habe Zeitstempel wie '1415560016876'. http://www.epochconverter.com/ konvertiert dies zu einem Datum ohne Probleme. Ihr Code oben gibt mir Sachen wie "46832-11-09 12:47:33 EDT" '... –

+20

Versuchen Sie das durch 1000 zu teilen:' as.POSIXct (1415560016876/1000, origin = "1970-01-01") "bekommt" 2014-11-09 13: 06: 56.875 CST "und Sie müssen sicherstellen, ob _seconds_ erwartet werden (wie für R) oder _milliseconds_. –

+1

Das hat den Trick, vielen Dank! –