2016-07-05 14 views
0

Wir verwenden eine API, die die Epochenzeit in Millisekunden als einen Parameter hat.Konvertieren Sie POSIXct-Objekt in Epochzeit in Millisekunden als Zeichenfolge, Vermeidung von Integer-Überlauf?

Ursprünglich war ich

milli <- paste0(as.integer(posix) * 1000) 

aber offenbar aufgrund R 32-Bit-Integer verwenden, die ziemlich schnell brach, weil sie implizit in einen doppelten umgewandelt wurde, als das Datum zu hoch bekam. Dann habe ich versucht

milli <- paste0(as.integer(posix), "000") 

aber wieder, dass eine endliche Lebensdauer hat.

Another answer vorgeschlagen mit options(scipen = 1000), die funktioniert, aber bedeutet, dass Sie nicht wissenschaftliche Druck erhalten. Wenn das wirklich der einzige Weg ist, dies zu tun, dann wird es reichen, aber gibt es eine Möglichkeit, von POSIXct zu Epochzeit in Millisekunden als String zu wechseln, ohne zuerst zu numerisch konvertieren zu müssen?

Ich bin glücklich, irgendwelche Pakete zu verwenden, wenn das benötigt wird.

+0

Könnte das etwas sein, das funktionieren kann? http://www.inside-r.org/questions/how-convert-posixct-numeric-milliseconds – theArun

+0

Was ist Ihr (ultimativer) Datumsbereich? Eine Möglichkeit besteht darin, zuerst eine bestimmte Anzahl von Sekunden (z. B. abhängig vom Jahr) aus Ihrem Quellposix zu entfernen, so dass das numerische Ergebnis zu dem Wert ohne erste Ziffern (in Zeichen) führt, und dann diese Ziffern einfügen. Nicht einfach, stimme ich zu ... –

+0

@Arun, die auch den wissenschaftlichen Druck verliert. Es ist die Lösung, die wir im Moment verwenden, aber es macht das Lesen großer Zahlen zu einem Schmerz. – Sean1708

Antwort

0

Umwandlung wie 'as.numeric(as.POSIXct(object$datum,tz='UTC')) * 1000’ sollte Sie keine Probleme in Bezug auf Überlauf geben. Ändern Sie die Zeitzone 'tz' nach Ihren Wünschen.

0

Die beste Methode, die ich bisher gefunden habe vorübergehend das Druckformat zu ändern, etwa so:

old_options <- options(scipen = 1000) 
milli <- paste0(as.numeric(posix) * 1000) 
options(old_options) 

Es spröde anfühlt, aber es funktioniert jetzt.