Python timedelta: Arbeiten mit Zeitintervallen in Python
In Python ist timedelta ein Datentyp innerhalb des datetime-Moduls, der verwendet wird, um Dauern oder Unterschiede zwischen zwei Zeitpunkten darzustellen.
Viele reale Datensätze enthalten Datums- und Zeitangaben, und eine gängige Operation in der Datenwissenschaft ist die Berechnung der Zeitdifferenz zwischen zwei Zeitpunkten.
Die Einheiten, die wir zur Messung von Daten und Zeiten verwenden (Jahre, Monate, Tage, Stunden, Minuten, Sekunden), sind nicht ganz einfach zu handhaben, vor allem wenn diese Einheiten unregelmäßige Längen haben.
Der Datentyp timedelta von Python, der Teil des Moduls datetime ist, kümmert sich jedoch um die Komplexität der Berechnung von Zeitintervallen.
Beginnen wir mit einer kurzen Antwort auf die Frage, was Pythons timedelta ist und fahren dann mit weiteren Details fort.
Die beiden wichtigsten und am häufigsten verwendeten Datentypen aus dem Modul datetime sind timedelta und datetime. Während datetime Objekte bestimmte Zeitpunkte darstellen (z. B. den 1. Januar 2024 um 10:30 Uhr), repräsentieren timedelta Objekte Zeiträume oder Intervalle zwischen zwei Punkten. Betrachte es als den Unterschied zwischen der Frage "Wann?" (datetime) und "Wie lange?" (timedelta).
Betrachte zwei Daten, die wir mit zwei datetime Objekten darstellen können. Wenn du ein Datum von einem anderen subtrahierst, entsteht ein timedelta Objekt, das das Zeitintervall zwischen den beiden Daten darstellt:
Die Ausgabe zeigt, dass die beiden Daten genau 147 Tage auseinander liegen. Im folgenden Beispiel verwenden wir das Datum und die Uhrzeit, wenn der Code ausgeführt wird, indem wir datetime.datetime.now() aufrufen:
Das Objekt timedelta zeigt nun die Zeit an, die zwischen dem Beginn des Jahres 2024 und dem Datum und der Uhrzeit der Ausführung des Codes verstrichen ist.
In diesem Artikel werden wir Pythons timedelta genauer unter die Lupe nehmen.
Timedelta-Objekte erstellen
Im vorherigen Abschnitt haben wir ein timedelta Objekt aus zwei datetime Objekten erstellt, aber wir können auch direkt ein Zeitintervall erstellen, indem wir den timedelta() Konstruktor aufrufen:
interval = datetime.timedelta(days=10, seconds=3600)print(interval)Bereitgestellt von
Beim Aufruf von timedelta() ist jede der folgenden Zeiteinheiten gültig:
Wochen
Tage
Stunden
Minuten
Sekunden
Millisekunden
microseconds
In diesem Lernprogramm wird genauer untersucht, wie Zeitintervalle in einem timedelta Objekt gespeichert werden.
Grundlegende Arithmetik mit timedelta
Wir können auch arithmetische Operationen mit timedelta Objekten durchführen. Betrachte die folgenden drei datetime Objekte, die die Veröffentlichungsdaten für Python 1.0, Python 2.0 und Python 3.0 darstellen. Wenn du die Objekte von datetime voneinander subtrahierst, entsteht ein timedelta Objekt:
Die Ausgabe zeigt die Anzahl der Tage zwischen den Veröffentlichungen von Python 1.0 und 2.0 und zwischen den Veröffentlichungen von Python 2.0 und 3.0. Die Zeitintervalle sind timedelta Objekte.
Es ist auch möglich, Additionen und Subtraktionen zwischen timedelta Objekten und datetime Objekten durchzuführen. Fügen wir eine timedelta mit days=100 zu release_date_python_3 hinzu:
print(release_date_python_3 + datetime.timedelta(days=100))Bereitgestellt von
Python 3.0 wurde am 3. Dezember 2008 veröffentlicht. Wenn wir zu diesem Datum hundert Tage hinzuzählen, kommen wir auf den 13. März 2009.
Wir können aber auch direkt mit den timedelta Objekten Rechenoperationen durchführen:
print("Difference between gap 1 and gap 2")print(time_between_1_and_2 - time_between_2_and_3)print("Sum of gap 1 and gap 2")print(time_between_1_and_2 + time_between_2_and_3)Bereitgestellt von
Difference between gap 1 and gap 2
556 days, 0:00:00
Sum of gap 1 and gap 2
6496 days, 0:00:00Bereitgestellt von
Die Ausgabe bestätigt, dass es möglich ist, timedelta Objekte zu subtrahieren und zu addieren. Auch Multiplikation und Division sind möglich:
print("Multiply time interval by 3:")print(time_between_1_and_2 *3)print("Divide time interval by 3:")print(time_between_1_and_2 /3)Bereitgestellt von
Multiply time interval by 3:
10578 days, 0:00:00
Divide time interval by 3:
1175 days, 8:00:00Bereitgestellt von
Wir können auch timedelta Objekte vergleichen:
print("Check if gap 1 is greater than gap 2")print(time_between_1_and_2 > time_between_2_and_3)Bereitgestellt von
Die Ausgabe bestätigt, dass der Abstand zwischen den Veröffentlichungsdaten von Python 1.0 und Python 2.0 größer ist als der Abstand zwischen Python 2.0 und Python 3.0.
Wichtigste timedelta Attribute und Methoden
Ein timedelta Objekt stellt ein Zeitintervall dar, indem es die Anzahl der Tage, Sekunden und Mikrosekunden speichert. Diese drei Einheiten sind die einzigen Zeiteinheiten, die durch Attribute in der Klasse timedelta dargestellt werden:
Auch wenn der Aufruf von timedelta() Argumente für Wochen, Stunden, Minuten und Millisekunden enthält, wandelt der Konstruktor diese Einheiten in Tage, Sekunden und Mikrosekunden um. Die print() Aufrufe enthalten f-Strings mit einem Gleichheitszeichen =, um den Variablennamen und seinen Wert anzuzeigen. Mehr über f-Strings erfährst du in diesem Tutorial über die Formatierung von f-Strings in Python.
Ein weiteres nützliches Werkzeug der Klasse timedelta ist die Methode total_seconds(). Diese Methode gibt das gesamte Zeitintervall in Sekunden zurück:
print("Total time interval in seconds:")print(interval.total_seconds())Bereitgestellt von
Dieser Wert stellt das gesamte Zeitintervall in Sekunden dar. Es ist nicht dasselbe wie der Wert von .seconds, der nur die Sekundenkomponente des Intervalls anzeigt, ohne die Tage und Mikrosekunden zu berücksichtigen.
Wir können den von .total_seconds() zurückgegebenen Wert verwenden, um das Zeitintervall in eine beliebige andere Einheit umzurechnen:
print("Total time interval in days:")print(interval.total_seconds()/3600/24)Bereitgestellt von
Die Ausgabe zeigt das Zeitintervall in Tagen, da der von .total_seconds() zurückgegebene Wert durch die Anzahl der Sekunden in einer Stunde und die Anzahl der Stunden in einem Tag geteilt wird.
timedelta Beispiel: Wachstum berechnen
Schauen wir uns ein Beispiel an. Der Online-Store eines Unternehmens, das Python-Bücher verkauft, protokolliert alle Verkäufe. Hier sind die Daten für einen Kunden:
data ={"customer_id":3542,"sales":[{"date":"2024-04-21T13:23:45","price":24.99,"quantity":1},{"date":"2024-02-13T10:54:12","price":24.99,"quantity":2},{"date":"2024-01-08T20:32:24","price":18.99,"quantity":1},],}Bereitgestellt von
Wir müssen den Zeitunterschied zwischen der ersten und der letzten Bestellung eines Kunden berechnen. Die Bestellungen sind in der Liste mit allen Verkäufen immer in chronologischer Reihenfolge.
Unser erster Schritt besteht darin, die Daten aus dieser verschachtelten Struktur zu extrahieren und sie in datetime Objekte umzuwandeln. Zum Glück sind die Zeitstempel im Standardformat ISO 8601 (JJJJ-MM-TTTHH:MM:SS), so dass wir die bequeme Methode fromisoformat() verwenden können:
sales = data["sales"]
dates =[]for item in sales:
date = datetime.datetime.fromisoformat(item["date"])
dates.append(date)print(dates)Bereitgestellt von
Die Liste dates enthält datetime Objekte mit den Daten der einzelnen Bestellungen. Schließlich können wir den Zeitabstand zwischen der ersten und der letzten Bestellung berechnen:
time_span = dates[0]- dates[-1]print(time_span)print(time_span.days)Bereitgestellt von
Die Differenz zwischen dem ersten und dem letzten Datum ergibt ein timedelta Objekt. Der Code zeigt time_span an, der die Anzahl der Tage, Stunden, Minuten und Sekunden angibt. Wir zeigen auch time_span.days an, um nur die ganze Anzahl der Tage anzuzeigen.
Wenn du mehr über die Umwandlung von Strings in Datetime erfahren möchtest, schau dir dieses Tutorial zu Python String to Datetime an.
Schnelle Tipps für die Verwendung von timedelta
Es gibt ein paar Dinge, die du bei der Verwendung von timedelta in Python beachten solltest:
1. Es ist am besten, Schlüsselwortargumente zu verwenden, wenn du timedelta() aufrufst, um Fehler bei den Einheiten zu vermeiden:
interval = datetime.timedelta(weeks=1, days=3, hours=1, milliseconds=1354)Bereitgestellt von
2. Wenn du ein Zeitintervall zwischen zwei Daten in verschiedenen Zeitzonen ermitteln willst, konvertiert timedelta die Daten in UTC-Daten, bevor die Zeitdifferenz berechnet wird:
2024-01-01 00:00:00+00:00
2024-01-01 00:00:00-05:00
5:00:00Bereitgestellt von
Das Datum auf some_date zeigt den Beginn des neuen Jahres an. Dies ist ein naives datetime Objekt, da es keine Informationen über die Zeitzone hat. some_date_lon und some_date_nyc sind jedoch bewusst datetime Objekte, da sie den Beginn des neuen Jahres in London bzw. New York darstellen.
Die timedelta, die sich aus der Subtraktion der beiden bewussten datetime Objekte ergibt, zeigt ein fünfstündiges Zeitintervall, das der UTC-Zeitdifferenz entspricht.
3. Die Sommerzeitumstellung wird von timedelta nicht berücksichtigt:
nyc = zoneinfo.ZoneInfo("America/New_York")
first_time = datetime.datetime.strptime("2024-03-10 1:00am","%Y-%m-%d %I:%M%p")
first_time = first_time.replace(tzinfo=nyc)
second_time = datetime.datetime.strptime("2024-03-10 3:00am","%Y-%m-%d %I:%M%p")
second_time = second_time.replace(tzinfo=nyc)
time_difference = second_time - first_time
print("Time difference between the first and second time:")print(time_difference)print("Checking the DST status of the first and second time:")print(f"{first_time.dst()=}")print(f"{second_time.dst()=}")Bereitgestellt von
Time difference between the first and second time:
2:00:00
Checking the DST status of the first and second time:
first_time.dst() = datetime.timedelta(0)
second_time.dst() = datetime.timedelta(seconds=3600)Bereitgestellt von
Die beiden Zeiten entsprechen 1:00 Uhr und 3:00 Uhr am 3. März 2024 in New York. Die Sommerzeit begann um 2:00 Uhr morgens an dem Tag, an dem die Uhren auf 3:00 Uhr morgens umgestellt wurden. Die Differenz zwischen den beiden Zeiten ergibt eine timedelta, die zwei Stunden entspricht, obwohl wegen des Beginns der Sommerzeit nur eine Stunde zwischen den beiden Zeiten vergangen ist.
Wir können in UTC konvertieren, wenn wir die tatsächlich vergangene Zeit benötigen:
first_time_utc = first_time.astimezone(zoneinfo.ZoneInfo("UTC"))
second_time_utc = second_time.astimezone(zoneinfo.ZoneInfo("UTC"))
time_difference_utc = second_time_utc - first_time_utc
print("Actual time difference between the first and second time:")print(time_difference_utc)Bereitgestellt von
Actual time difference between the first and second time:
1:00:00Bereitgestellt von
Die Umrechnung in UTC vor der Subtraktion der datetime Objekte ergibt die tatsächliche Zeit zwischen den beiden datetime Objekten.
Fazit
Die Klasse timedelta von Python bietet einfache Methoden für den Umgang mit Zeitintervallen, die es einfacher machen, mit Zeiträumen in verschiedenen Einheiten zu arbeiten. Wir haben uns angeschaut, wie man timedelta Objekte erstellt und mit ihnen Rechenoperationen wie Addition, Subtraktion, Multiplikation und Division durchführt.
Mehr über den Umgang mit Daten und Zeiten erfährst du in den folgenden Artikeln:
Ich habe Physik und Mathematik auf UG-Ebene an der Universität Malta studiert. Dann zog ich nach London und machte meinen Doktor in Physik am Imperial College. Ich habe an neuartigen optischen Techniken zur Abbildung der menschlichen Netzhaut gearbeitet. Jetzt konzentriere ich mich darauf, über Python zu schreiben, über Python zu kommunizieren und Python zu unterrichten.
Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
Lerne, wie du Python-Listen mit Techniken wie Slicing, List Comprehensions und itertools aufteilen kannst. Finde heraus, wann du welche Methode für die beste Datenverarbeitung nutzen solltest.
Lerne, wie du Zahlen in Python mit round(), f-Strings, format(), dem decimal-Modul, NumPy und mehr auf zwei Dezimalstellen rundest — inklusive Vergleichstabelle der Methoden.
Ein umfassendes Einführungs-Tutorial zu Python-Schleifen. Lerne und übe while- und for-Schleifen, verschachtelte Schleifen, die Schlüsselwörter break und continue, die Range-Funktion und vieles mehr!
Viele reale Datensätze enthalten Datums- und Zeitangaben, und eine gängige Operation in der Datenwissenschaft ist die Berechnung der Zeitdifferenz zwischen zwei Zeitpunkten.
Die Einheiten, die wir zur Messung von Daten und Zeiten verwenden (Jahre, Monate, Tage, Stunden, Minuten, Sekunden), sind nicht ganz einfach zu handhaben, vor allem wenn diese Einheiten unregelmäßige Längen haben.
Der Datentyp
timedeltavon Python, der Teil des Modulsdatetimeist, kümmert sich jedoch um die Komplexität der Berechnung von Zeitintervallen.Beginnen wir mit einer kurzen Antwort auf die Frage, was Pythons
timedeltaist und fahren dann mit weiteren Details fort.Wenn du mehr über Datums- und Zeitangaben in Python erfahren möchtest, schau dir diesen Kurs über das Arbeiten mit Datums- und Zeitangaben in Python an.
Kurze Antwort: Was ist das Timedelta von Python?
Die beiden wichtigsten und am häufigsten verwendeten Datentypen aus dem Modul
datetimesindtimedeltaunddatetime. WährenddatetimeObjekte bestimmte Zeitpunkte darstellen (z. B. den 1. Januar 2024 um 10:30 Uhr), repräsentierentimedeltaObjekte Zeiträume oder Intervalle zwischen zwei Punkten. Betrachte es als den Unterschied zwischen der Frage "Wann?" (datetime) und "Wie lange?" (timedelta).Betrachte zwei Daten, die wir mit zwei
datetimeObjekten darstellen können. Wenn du ein Datum von einem anderen subtrahierst, entsteht eintimedeltaObjekt, das das Zeitintervall zwischen den beiden Daten darstellt:Die Ausgabe zeigt, dass die beiden Daten genau 147 Tage auseinander liegen. Im folgenden Beispiel verwenden wir das Datum und die Uhrzeit, wenn der Code ausgeführt wird, indem wir datetime.datetime.now() aufrufen:
Das Objekt
timedeltazeigt nun die Zeit an, die zwischen dem Beginn des Jahres 2024 und dem Datum und der Uhrzeit der Ausführung des Codes verstrichen ist.In diesem Artikel werden wir Pythons
timedeltagenauer unter die Lupe nehmen.Timedelta-Objekte erstellen
Im vorherigen Abschnitt haben wir ein
timedeltaObjekt aus zweidatetimeObjekten erstellt, aber wir können auch direkt ein Zeitintervall erstellen, indem wir dentimedelta()Konstruktor aufrufen:Das Intervall ist zehn Tage und eine Stunde lang. Wir können auch andere Zeiteinheiten verwenden, wenn wir eine
timedeltaInstanz erstellen:Beim Aufruf von
timedelta()ist jede der folgenden Zeiteinheiten gültig:In diesem Lernprogramm wird genauer untersucht, wie Zeitintervalle in einem
timedeltaObjekt gespeichert werden.Grundlegende Arithmetik mit timedelta
Wir können auch arithmetische Operationen mit
timedeltaObjekten durchführen. Betrachte die folgenden dreidatetimeObjekte, die die Veröffentlichungsdaten für Python 1.0, Python 2.0 und Python 3.0 darstellen. Wenn du die Objekte vondatetimevoneinander subtrahierst, entsteht eintimedeltaObjekt:Die Ausgabe zeigt die Anzahl der Tage zwischen den Veröffentlichungen von Python 1.0 und 2.0 und zwischen den Veröffentlichungen von Python 2.0 und 3.0. Die Zeitintervalle sind
timedeltaObjekte.Es ist auch möglich, Additionen und Subtraktionen zwischen
timedeltaObjekten unddatetimeObjekten durchzuführen. Fügen wir einetimedeltamitdays=100zurelease_date_python_3hinzu:Python 3.0 wurde am 3. Dezember 2008 veröffentlicht. Wenn wir zu diesem Datum hundert Tage hinzuzählen, kommen wir auf den 13. März 2009.
Wir können aber auch direkt mit den
timedeltaObjekten Rechenoperationen durchführen:Die Ausgabe bestätigt, dass es möglich ist,
timedeltaObjekte zu subtrahieren und zu addieren. Auch Multiplikation und Division sind möglich:Wir können auch
timedeltaObjekte vergleichen:Die Ausgabe bestätigt, dass der Abstand zwischen den Veröffentlichungsdaten von Python 1.0 und Python 2.0 größer ist als der Abstand zwischen Python 2.0 und Python 3.0.
Wichtigste timedelta Attribute und Methoden
Ein
timedeltaObjekt stellt ein Zeitintervall dar, indem es die Anzahl der Tage, Sekunden und Mikrosekunden speichert. Diese drei Einheiten sind die einzigen Zeiteinheiten, die durch Attribute in der Klassetimedeltadargestellt werden:Auch wenn der Aufruf von
timedelta()Argumente für Wochen, Stunden, Minuten und Millisekunden enthält, wandelt der Konstruktor diese Einheiten in Tage, Sekunden und Mikrosekunden um. Dieprint()Aufrufe enthalten f-Strings mit einem Gleichheitszeichen =, um den Variablennamen und seinen Wert anzuzeigen. Mehr über f-Strings erfährst du in diesem Tutorial über die Formatierung von f-Strings in Python.Ein weiteres nützliches Werkzeug der Klasse
timedeltaist die Methodetotal_seconds(). Diese Methode gibt das gesamte Zeitintervall in Sekunden zurück:Dieser Wert stellt das gesamte Zeitintervall in Sekunden dar. Es ist nicht dasselbe wie der Wert von
.seconds, der nur die Sekundenkomponente des Intervalls anzeigt, ohne die Tage und Mikrosekunden zu berücksichtigen.Wir können den von
.total_seconds()zurückgegebenen Wert verwenden, um das Zeitintervall in eine beliebige andere Einheit umzurechnen:Die Ausgabe zeigt das Zeitintervall in Tagen, da der von
.total_seconds()zurückgegebene Wert durch die Anzahl der Sekunden in einer Stunde und die Anzahl der Stunden in einem Tag geteilt wird.timedelta Beispiel: Wachstum berechnen
Schauen wir uns ein Beispiel an. Der Online-Store eines Unternehmens, das Python-Bücher verkauft, protokolliert alle Verkäufe. Hier sind die Daten für einen Kunden:
Wir müssen den Zeitunterschied zwischen der ersten und der letzten Bestellung eines Kunden berechnen. Die Bestellungen sind in der Liste mit allen Verkäufen immer in chronologischer Reihenfolge.
Unser erster Schritt besteht darin, die Daten aus dieser verschachtelten Struktur zu extrahieren und sie in
datetimeObjekte umzuwandeln. Zum Glück sind die Zeitstempel im Standardformat ISO 8601 (JJJJ-MM-TTTHH:MM:SS), so dass wir die bequeme Methodefromisoformat()verwenden können:Die Liste
datesenthältdatetimeObjekte mit den Daten der einzelnen Bestellungen. Schließlich können wir den Zeitabstand zwischen der ersten und der letzten Bestellung berechnen:Die Differenz zwischen dem ersten und dem letzten Datum ergibt ein
timedeltaObjekt. Der Code zeigttime_spanan, der die Anzahl der Tage, Stunden, Minuten und Sekunden angibt. Wir zeigen auchtime_span.daysan, um nur die ganze Anzahl der Tage anzuzeigen.Wenn du mehr über die Umwandlung von Strings in Datetime erfahren möchtest, schau dir dieses Tutorial zu Python String to Datetime an.
Schnelle Tipps für die Verwendung von timedelta
Es gibt ein paar Dinge, die du bei der Verwendung von
timedeltain Python beachten solltest:1. Es ist am besten, Schlüsselwortargumente zu verwenden, wenn du
timedelta()aufrufst, um Fehler bei den Einheiten zu vermeiden:2. Wenn du ein Zeitintervall zwischen zwei Daten in verschiedenen Zeitzonen ermitteln willst, konvertiert
timedeltadie Daten in UTC-Daten, bevor die Zeitdifferenz berechnet wird:Das Datum auf
some_datezeigt den Beginn des neuen Jahres an. Dies ist ein naivesdatetimeObjekt, da es keine Informationen über die Zeitzone hat.some_date_lonundsome_date_nycsind jedoch bewusstdatetimeObjekte, da sie den Beginn des neuen Jahres in London bzw. New York darstellen.Die
timedelta, die sich aus der Subtraktion der beiden bewusstendatetimeObjekte ergibt, zeigt ein fünfstündiges Zeitintervall, das der UTC-Zeitdifferenz entspricht.3. Die Sommerzeitumstellung wird von
timedeltanicht berücksichtigt:Die beiden Zeiten entsprechen 1:00 Uhr und 3:00 Uhr am 3. März 2024 in New York. Die Sommerzeit begann um 2:00 Uhr morgens an dem Tag, an dem die Uhren auf 3:00 Uhr morgens umgestellt wurden. Die Differenz zwischen den beiden Zeiten ergibt eine
timedelta, die zwei Stunden entspricht, obwohl wegen des Beginns der Sommerzeit nur eine Stunde zwischen den beiden Zeiten vergangen ist.Wir können in UTC konvertieren, wenn wir die tatsächlich vergangene Zeit benötigen:
Die Umrechnung in UTC vor der Subtraktion der
datetimeObjekte ergibt die tatsächliche Zeit zwischen den beidendatetimeObjekten.Fazit
Die Klasse
timedeltavon Python bietet einfache Methoden für den Umgang mit Zeitintervallen, die es einfacher machen, mit Zeiträumen in verschiedenen Einheiten zu arbeiten. Wir haben uns angeschaut, wie mantimedeltaObjekte erstellt und mit ihnen Rechenoperationen wie Addition, Subtraktion, Multiplikation und Division durchführt.Mehr über den Umgang mit Daten und Zeiten erfährst du in den folgenden Artikeln: