Wie konvertiert man in Python ein „datetime“-Objekt in Sekunden?

Lesezeit: 7 Minuten

Wie konvertiert man in Python ein „datetime Objekt in Sekunden
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.

  • 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


Wie konvertiert man in Python ein „datetime Objekt in Sekunden
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.

  • Python warnt mich jetzt: “TypeError: can’t subtract offset-naive and offset-aware datetimes” Was ist die beste Lösung, um das zu beheben?

    – Aaron Ash

    13. April 13 um 0:47 Uhr


  • @ Charybdis, versuche es datetime.datetime(1970,1,1,tzinfo=pytz.utc).

    – Markieren Sie Lösegeld

    13. April 13 um 1:00 Uhr

  • Erwägen Sie die Verwendung von: datetime.datetime.utcfromtimestamp(0) Ich habe dies verwendet, um die ‘Epoche’ leicht zu bekommen. Beachten Sie, dass die Epoche nicht immer auf allen Systemen gleich ist.

    – DA

    5. November 13 um 20:04 Uhr


  • Seien Sie hier sehr vorsichtig mit Zeitzonen. Ich bin bei UTC+2, was bedeutet, dass die Ausgabe von time.time() und datetime.now() - datetime(1970, 1, 1) um 7200 Sekunden unterscheiden. Eher verwenden (t - datetime.datetime.fromtimestamp(0)).total_seconds(). Machen nicht benutzen utcfromtimestamp(0) wenn Sie eine Datumszeit in Ihre lokale Zeitzone konvertieren möchten.

    – Carl

    9. Juli 15 um 9:18 Uhr

  • @DA: Python unterstützt keine Nicht-POSIX-Epochen. Alle Systeme, auf denen Python funktioniert, verwenden dieselbe Epoche: 1970-01-01 00:00:00 UTC

    – jfs

    10. Juli 15 um 20:24 Uhr


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.

  • Wer auch immer dies abgelehnt hat, können Sie bitte erklären, warum?

    – Andrzej Pronobis

    10. Juni 15 um 19:57 Uhr

  • Ich nehme an, die Ablehnung ist auf das python-2.7-Tag in der Frage zurückzuführen (es ist nur eine Vermutung).

    – jfs

    10. Juli 15 um 21:08 Uhr

  • Dies sollte die akzeptierte Antwort sein / die akzeptierte Antwort sollte entsprechend aktualisiert werden.

    – DreamFlasher

    12. September 16 um 12:49 Uhr

  • Zeit für ein Upgrade, denke ich 😉

    – DreamFlasher

    1. August 17 um 11:42 Uhr

  • ist es möglich, diese Entfernung von einem anderen Startdatum aus zu berechnen? (Ich meine, das Datum 1970-01-01 zu ändern)

    – Pellerossa-Pelles

    25. Februar 20 um 14:20 Uhr

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

  • Seien Sie vorsichtig, wenn Sie time.mktime verwenden, da es sich um die Ortszeit handelt und es plattformabhängig ist

    – Shih-Wen Su

    9. Januar 13 um 19:10 Uhr

  • Seien Sie wirklich vorsichtig. Es hat mich in den Arsch gebissen

    – Arg

    9. August 13 um 7:29 Uhr

  • es setzt das voraus t ist eine Ortszeit. UTC-Offset für die lokale Zeitzone kann in der Vergangenheit anders gewesen sein und wenn mktime() (C-Bibliothek) keinen Zugriff auf historische Zeitzonendaten auf einer bestimmten Plattform hat, da dies möglicherweise fehlschlägt (pytz ist eine portable Möglichkeit, auf die tz-Datenbank zuzugreifen). Außerdem kann die Ortszeit mehrdeutig sein, z. B. während der DST-Übergänge – Sie benötigen zusätzliche Informationen, um sie eindeutig zu machen, z. B. wenn Sie wissen, dass aufeinanderfolgende Datums-/Uhrzeitwerte in einer Protokolldatei ansteigen sollten

    – jfs

    10. Juli 15 um 21:00 Uhr


  • Seien Sie vorsichtig, wenn Sie dies mit Zeiten verwenden, die Sekundenbruchteile haben. time.mktime(datetime.datetime(2019, 8, 3, 4, 5, 6, 912000).timetuple()) ergibt sich 1564819506.0stillschweigend die Millisekunden fallen lassen, aber datetime.datetime(2019, 8, 3, 4, 5, 6, 912000).timestamp() (Antwort von Andrzej Pronobis) ergibt 1564819506.912das erwartete Ergebnis.

    – Alex

    5. November 19 um 23:40 Uhr


Wie konvertiert man in Python ein „datetime Objekt in Sekunden
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

  • Funktioniert bei mir in Python 2.7, mit import datetime; t = datetime.datetime(2011, 10, 21, 0, 0) (wie von OP angegeben). Aber ich bezweifle wirklich, dass %s ein kürzlich hinzugefügtes Zeitformat ist.

    – dan3

    5. April 14 um 10:30 Uhr

  • @dan3: falsch. %s wird nicht unterstützt (es funktioniert möglicherweise auf einigen Plattformen, iff t ein naives datetime-Objekt ist, das die lokale Zeit darstellt, und wenn die lokale C-Bibliothek Zugriff auf die tz-Datenbank hat, kann das Ergebnis sonst falsch sein). Verwenden Sie es nicht.

    – jfs

    10. Juli 15 um 20:35 Uhr

  • %s ist nirgendwo dokumentiert. Ich habe es in echten Code gesät und mich gefragt, was das ist, und in der Dokumentation nachgesehen, und es gibt so etwas wie nicht %s. Es gibt nur mit großem S nur für die Sekunden.

    – WStojkow

    5. Oktober 16 um 10:36 Uhr

1644074229 610 Wie konvertiert man in Python ein „datetime Objekt in Sekunden
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.

  • Funktioniert bei mir in Python 2.7, mit import datetime; t = datetime.datetime(2011, 10, 21, 0, 0) (wie von OP angegeben). Aber ich bezweifle wirklich, dass %s ein kürzlich hinzugefügtes Zeitformat ist.

    – dan3

    5. April 14 um 10:30 Uhr

  • @dan3: falsch. %s wird nicht unterstützt (es funktioniert möglicherweise auf einigen Plattformen, iff t ein naives datetime-Objekt ist, das die lokale Zeit darstellt, und wenn die lokale C-Bibliothek Zugriff auf die tz-Datenbank hat, kann das Ergebnis sonst falsch sein). Verwenden Sie es nicht.

    – jfs

    10. Juli 15 um 20:35 Uhr

  • %s ist nirgendwo dokumentiert. Ich habe es in echten Code gesät und mich gefragt, was das ist, und in der Dokumentation nachgesehen, und es gibt so etwas wie nicht %s. Es gibt nur mit großem S nur für die Sekunden.

    – WStojkow

    5. Oktober 16 um 10:36 Uhr

1644074229 565 Wie konvertiert man in Python ein „datetime Objekt in Sekunden
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.

.

784690cookie-checkWie konvertiert man in Python ein „datetime“-Objekt in Sekunden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy