Wie konvertiert man ein Python-Datetime-Objekt in Sekunden?


Answers

Um die Unix-Zeit (Sekunden seit dem 1. Januar 1970) zu erhalten:

>>> import datetime, time
>>> t = datetime.datetime(2011, 10, 21, 0, 0)
>>> time.mktime(t.timetuple())
1319148000.0
Question

Entschuldigung für die einfache Frage ... Ich bin neu bei Python ... Ich habe gesucht und nichts scheint zu funktionieren.

Ich habe eine Reihe von datetime Objekten und ich möchte die Anzahl der Sekunden seit einer festen Zeit in der Vergangenheit für jeden einzelnen berechnen (zum Beispiel seit dem 1. Januar 1970).

import datetime
t = datetime.datetime(2009, 10, 21, 0, 0)

Dies scheint nur zwischen Daten zu unterscheiden, die unterschiedliche Tage haben:

t.toordinal()

Jede Hilfe wird sehr geschätzt.




So konvertieren Sie ein Datetime-Objekt, das die Zeit in UTC darstellt, in den POSIX-Zeitstempel :

from datetime import timezone

seconds_since_epoch = utc_time.replace(tzinfo=timezone.utc).timestamp()

So konvertieren Sie ein Datetime-Objekt, das die Zeit in der lokalen Zeitzone darstellt, in den POSIX-Zeitstempel:

import tzlocal # $ pip install tzlocal

local_timezone = tzlocal.get_localzone()
seconds_since_epoch = local_timezone.localize(local_time, is_dst=None).timestamp()

Siehe Wie konvertiere ich die lokale Zeit in Python in UTC? Wenn die tz-Datenbank auf einer bestimmten Plattform verfügbar ist; Eine stdlib-only-Lösung funktioniert möglicherweise .

Folgen Sie den Links, wenn Sie Lösungen für <3.3 Python-Versionen benötigen.




Vielleicht vom Thema weg: um die UNIX / POSIX-Zeit von Datetime zu bekommen und sie zurück zu konvertieren:

>>> import datetime, time
>>> dt = datetime.datetime(2011, 10, 21, 0, 0)
>>> s = time.mktime(dt.timetuple())
>>> s
1319148000.0

# and back
>>> datetime.datetime.fromtimestamp(s)
datetime.datetime(2011, 10, 21, 0, 0)

Beachten Sie, dass verschiedene Zeitzonen Auswirkungen auf die Ergebnisse haben, zB mein aktueller TZ / DST-Rückgabewert:

>>>  time.mktime(datetime.datetime(1970, 1, 1, 0, 0).timetuple())
-3600 # -1h

Daher sollte man eine Normalisierung auf UTC in Erwägung ziehen, indem man UTC-Versionen der Funktionen verwendet.

Beachten Sie, dass das vorherige Ergebnis zur Berechnung des UTC-Offsets Ihrer aktuellen Zeitzone verwendet werden kann. In diesem Beispiel ist dies + 1h, dh UTC + 0100.

Verweise:




aus den Python-Dokumenten:

timedelta.total_seconds()

Gibt die Gesamtzahl der Sekunden zurück, die in der Dauer enthalten sind. Gleichwertig

(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6

berechnet mit True Division aktiviert.

Beachten Sie, dass diese Methode für sehr große Zeitintervalle (mehr als 270 Jahre auf den meisten Plattformen) die Genauigkeit von Mikrosekunden verliert.

Diese Funktionalität ist neu in Version 2.7.