Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Konvertierung der Python-DateTime-Zeichenfolge in ganzzahlige Millisekunden

[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"