Python: Konvertierung von string in timestamp mit Mikrosekunden
Ich würde gerne konvertieren string date format timestamp mit Mikrosekunden
Ich versuche im folgenden aber geben nicht das erwartete Ergebnis:
"""input string date -> 2014-08-01 04:41:52,117
expected result -> 1410748201.117"""
import time
import datetime
myDate = "2014-08-01 04:41:52,117"
timestamp = time.mktime(datetime.datetime.strptime(myDate, "%Y-%m-%d %H:%M:%S,%f").timetuple())
print timestamp
> 1410748201.0
Wo haben die Millisekunden gehen?
- die Eingabe-Datum (2014-08-01) entspricht nicht dem timestamp (2014-09-15 02:30:01.117 Z)
InformationsquelleAutor Krilin | 2014-10-02
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keinen slot für den Mikrosekunden-Komponente in ein Zeit-Tupel:
Müssen Sie diese manuell:
Die andere Methode, die Sie Folgen konnte ist die Erstellung eines
timedelta()
Objekt relativ zu der Epoche, dann Holen Sie sich die Zeitstempel mit dertimedelta.total_seconds()
Methode:Den Einsatz eines lokale Zeit Epoche ist ganz absichtlich, da Sie eine naive (nicht timezone-aware) datetime-Wert. Diese Methode kann ungenau, basierend auf der Geschichte von Ihrem lokalen timezone jedoch sehen J. F. Sebastians Kommentar. Sie müssten, um zu konvertieren, die naive datetime-Wert zu einer Zeitzone-bewusst datetime-Wert zuerst mit Ihrem lokalen timezone, vor dem Abzug Zeitzone bewusst Epoche.
Als solche, es ist leichter zu bleiben
timetuple()
+ Mikrosekunden Ansatz.Demo:
(dt - epoch)
ist falsch, wenndt
ist eine naive lokale Zeit. Lokale Zeit gesetzt werden können, zurück (Sommerzeit-übergang im Herbst in der nördlichen Hemisphäre). Timestamp soll nicht eingestellt werden in diesem Fall zurück. 2 Auch die "lokale Zeit-Epoche" kann missverständlich sein. Die Epoche ist eine einzige Zeit-Instanz (1970, Python) - es ist das gleiche auf der ganzen Welt. Wenn die C-Bibliothek unterstützt einen historischen Zeitzone-Datenbank oder die UTC für die lokale Zeitzone, hatte den gleichen Wert zu der Zeit, danndatetime.fromtimestamp(0)
gibt die lokale Zeit entsprechend der Epoche.epoch
Wert verwendetfromtimestamp()
, nichtutcfromtimestamp()
zu bewältigen Sommerzeit Unterschied, gerade weil diedt
Wert ist naiv.utcfromtimestamp()
stattdessen würde ich zuerst machendt
timezone bewusst und ermöglichen so eine Python um einen Ausgleich für die Sommerzeit Probleme.ts = utc_time - epoch_in_utc = local time - utc offset(now) - epoch in local time + utc offset (then)
. Ihre Formel ist äquivalent zur Verwendung der UTC-offset wie es jetzt ist, d.h., es wird davon ausgegangenutc offset(now) == utc offset (then)
.time.time()
nicht die historischen Werte entweder.time.time()
hängt nicht von der lokalen Zeitzone (wenn wir ignorieren, Systeme mit'right'
Zeitzonen (es ist eine andere Zeit-Skala)). Es muss nicht die historische Zeitzonen Datenbank.In Python 3.4 und später können Sie
Dies erfordert nicht den Import der
time
Modul. Es verwendet auch weniger Schritte, so dass es schneller sein soll. Für ältere Versionen von python die andere Antworten sind wahrscheinlich die beste option.Jedoch, die daraus resultierenden timestamp interpretieren myDate in lokaler Zeit, sondern als UTC, die möglicherweise Probleme verursachen, wenn myDate gegeben wurde, in UTC
Es ist der einfache Teil.
.timetuple()
nennen Ihnen fällt. Man könnte hinzufügen, Sie wieder mit.microsecond
Attribut. Diedatetime.timestamp()
- Methode aus der Standardbibliothek funktioniert so nicht für naiv datetime-Objekte:Reicht es wenn möglich ~1 Stunde Fehler können ignoriert werden, in Ihrem Fall. Ich nehme an, Sie wollen Mikrosekunden und deshalb Sie können nicht ignorieren, ~1 Stunde Zeit, die Fehler zu leise.
Konvertieren der lokalen Zeit gegeben, wie Sie eine Zeichenfolge an die POSIX-Zeitstempel korrekt ist, eine komplexe Aufgabe im Allgemeinen. Sie könnte konvertieren Sie die lokale Zeit zu UTC und dann Holen Sie sich die Zeitstempel UTC-Zeit.
Gibt es zwei wesentliche Probleme:
lokale Zeit minus Epoche in local time
Formel fehlschlagenSowohl behoben werden können, mit der tz-Datenbank (
pytz
- Modul in Python):Das Ergebnis ist
timestamp
-- eintimedelta
Objekt, können Sie wandeln es in Sekunden, Millisekunden, etc.Auch andere Systeme können sich anders Verhalten, um/während der Schaltsekunden. Die meisten Anwendung ignorieren kann, dass Sie existieren.
Im Allgemeinen, ist es möglicherweise einfacher, zu speichern POSIX-Zeitstempel zusätzlich auf die lokale Zeit, anstatt zu versuchen zu erraten, wird es aus der lokalen Zeit.
datetime.timestamp
steht nur in Python 3; die OP ist mit Python 2 (Beurteilung durch dieprint
Aussagen)..timestamp()
Methode. Ich nur verwenden Sie es als ein Beispiel (fehlerhaft) Umsetzung.+ d.microsecond / 1e6
funktioniert auf die gleiche Weise auf Python 2 und 3.