[Folgenden Vorschlag in den Kommentaren bearbeitet]
Mit Ben Alperts Antwort auf Wie kann ich in Python ein datetime-Objekt in Millisekunden seit der Epoche (Unix-Zeit) konvertieren wir können Folgendes tun:
from datetime import datetime
def unix_time(dt):
epoch = datetime.utcfromtimestamp(0)
delta = dt - epoch
return delta.total_seconds()
def unix_time_millis(dt):
return int(unix_time(dt) * 1000)
a = datetime.strptime("2015-06-27T02:10:05.653000Z", "%Y-%m-%dT%H:%M:%S.%fZ")
unix_time_millis(a)
gibt zurück:
1435371005653
Dies entspricht:Sa, 27. Juni 2015 02:10:05 GMT (wie erwartet)
Wir können auch .strftime('%s')
von datetime verwenden um die Unix-Zeit zu erhalten, sogar Millisekunden, indem Sie Folgendes verwenden (aber dies wird nicht empfohlen ):
from decimal import Decimal
int(Decimal(datetime.strptime("2015-06-27T02:10:05.653000Z", "%Y-%m-%dT%H:%M:%S.%fZ").strftime('%s.%f'))*1000)
gibt zurück:
1435396205653
entspricht:Sa, 27. Juni 2015 09:10:05 GMT (auf meinem Mac in San Diego; Hinweis :Das sind 7 Stunden weniger als wir vielleicht erwartet haben).
Die Fehlerursache wird von J.F. Sebastian in den Kommentaren des obigen Links und in diesem Antwort bezüglich .strftime('%s')
Verhalten. J.F. Sebastian weist darauf hin, dass "es nicht unterstützt wird, es nicht portierbar ist, es möglicherweise stillschweigend ein falsches Ergebnis für ein bewusstes Datetime-Objekt erzeugt, es fehlschlägt, wenn die Eingabe in UTC erfolgt (wie in der Frage), aber die lokale Zeitzone nicht UTC ist"