
Nathan Lippi
Entschuldigung für die einfache Frage … Ich bin neu in Python … Ich habe mich umgesehen und nichts scheint zu funktionieren.
Ich habe eine Reihe von Datetime-Objekten und möchte für jedes Objekt die Anzahl der Sekunden seit einem festen Zeitpunkt in der Vergangenheit berechnen (z. B. 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.

Mark Lösegeld
Für das Sonderdatum 1. Januar 1970 gibt es mehrere Möglichkeiten.
Für jedes andere Startdatum müssen Sie die Differenz zwischen den beiden Daten in Sekunden erhalten. Subtrahieren von zwei Daten ergibt a timedelta
Objekt, das ab Python 2.7 eine hat total_seconds()
Funktion.
>>> (t-datetime.datetime(1970,1,1)).total_seconds()
1256083200.0
Das Startdatum wird normalerweise in UTC angegeben, sodass für korrekte Ergebnisse die datetime
Sie in diese Formel eingeben, sollten ebenfalls in UTC sein. Wenn dein datetime
nicht bereits in UTC ist, müssen Sie es konvertieren, bevor Sie es verwenden, oder eine anhängen tzinfo
Klasse, die den richtigen Offset hat.
Wie in den Kommentaren erwähnt, wenn Sie eine haben tzinfo
an Ihrem befestigt datetime
dann benötigen Sie auch eine am Startdatum, sonst schlägt die Subtraktion fehl; für das obige Beispiel würde ich hinzufügen tzinfo=pytz.utc
bei Verwendung von Python 2 oder tzinfo=timezone.utc
wenn Sie Python 3 verwenden.
Ab Python 3.3 wird dies super einfach mit dem datetime.timestamp()
Methode. Dies ist natürlich nur nützlich, wenn Sie die Anzahl der Sekunden vom 01.01.1970 UTC benötigen.
from datetime import datetime
dt = datetime.today() # Get timezone naive now
seconds = dt.timestamp()
Der Rückgabewert ist ein Gleitkommawert, der gerade Bruchteile einer Sekunde darstellt. Wenn datetime zeitzonennaiv ist (wie im obigen Beispiel), wird davon ausgegangen, dass das datetime-Objekt die lokale Zeit darstellt, dh es ist die Anzahl der Sekunden von der aktuellen Zeit an Ihrem Standort bis zum 01.01.1970 UTC.
So erhalten Sie die Unix-Zeit (Sekunden seit dem 1. Januar 1970):
>>> import datetime, time
>>> t = datetime.datetime(2011, 10, 21, 0, 0)
>>> time.mktime(t.timetuple())
1319148000.0

Robert Lujo
Vielleicht nicht zum Thema: um die UNIX/POSIX-Zeit von datetime zu erhalten 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 unterschiedliche Zeitzonen Auswirkungen auf die Ergebnisse haben, z. B. meine aktuellen TZ/DST-Rückgaben:
>>> time.mktime(datetime.datetime(1970, 1, 1, 0, 0).timetuple())
-3600 # -1h
daher sollte man erwägen, auf UTC zu normalisieren, indem man UTC-Versionen der Funktionen verwendet.
Notiz Dieses vorherige Ergebnis kann verwendet werden, um den UTC-Offset Ihrer aktuellen Zeitzone zu berechnen. In diesem Beispiel ist dies +1h, also UTC+0100.
Verweise:
int (t.strftime("%s"))
funktioniert auch

Mariusz Jamro
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
mit aktivierter echter Division berechnet.
Beachten Sie, dass diese Methode bei sehr großen Zeitintervallen (mehr als 270 Jahre auf den meisten Plattformen) an Genauigkeit im Mikrosekundenbereich verliert.
Diese Funktionalität ist neu in Version 2.7.

Gemeinschaft
So konvertieren Sie ein datetime-Objekt, das die Zeit in UTC darstellt, in einen 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 einen 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 Ortszeit in UTC in Python? Wenn die tz-Datenbank auf einer bestimmten Plattform verfügbar ist; Eine reine stdlib-Lösung kann funktionieren.
Folgen Sie den Links, wenn Sie Lösungen für benötigen <3.3
Python-Versionen.
.
7846900cookie-checkWie konvertiert man in Python ein „datetime“-Objekt in Sekunden?yes
verwandt: Konvertieren
datetime.date
zum UTC-Zeitstempel in Python– jfs
10. Juli 15 um 20:23 Uhr
Ich würde wahrscheinlich beide seit Epoche in S konvertieren und von dort aus gehen:
int(t.timestamp())
– Nerdwaller
13. November 15 um 20:41 Uhr
Für die entgegengesetzte Operation gehen Sie hier: Konvertiere-Sekunden-seit-Epoche-zu-einem-DatumUhrzeit-Objekt
– Trevor Boyd Smith
06.12.18 um 19:00 Uhr