Was ist der Unterschied zwischen datetime.timedelta
(aus Pythons Standardbibliothek) und der dateutil.relativedelta.relativedelta
Arbeit nur mit Tagen?
Soweit ich weiß, werden timedelta
nur Tage (und Wochen) unterstützt, während relativedelta
Unterstützung für Zeiträume hinzugefügt wird, die in Jahren, Monaten, Wochen oder Tagen definiert sind, sowie Absolutwerte für Jahr, Monat oder Tag definiert werden. (Denken Sie daran, dass ich mir für die Zwecke dieser Frage keine Gedanken über Stunden, Minuten oder Sekunden machen muss.)
Wenn man bedenkt, dass ich nur mit datetime.date
Objekten arbeite und mich nur für Zeiträume interessiere, die durch die Anzahl der Tage definiert sind, was ist der Unterschied zwischen timedelta
und relativedelta
? Gibt es einen Unterschied?
from datetime import date, timedelta
from dateutil.relativedelta import relativedelta
i = -1 # This could have been any integer, positive or negative
someday = date.today()
# Is there any difference between these two lines?
otherday = someday + timedelta(days=i)
otherday = someday + relativedelta(days=i)
dateime.timedelta
denen Sie das erreichen, was Sie möchten, und vermeiden Sie die Abhängigkeit vom externendateutil
Paket.Antworten:
dateutil
ist ein Erweiterungspaket für das Python-Standardmoduldatetime
. Wie Sie sagen, bietet es zusätzliche Funktionen, z. B. Zeitpläne, die in Einheiten ausgedrückt werden, die größer als ein Tag sind.Dies ist nützlich, wenn Sie Fragen stellen müssen, z. B. wie viele Monate kann ich sparen, bevor der Geburtstag meiner Freundin kommt, oder was ist der letzte Freitag im Monat? Dies verbirgt komplexe Berechnungen, die durch die unterschiedlichen Längen der Monate oder zusätzliche Tage in Schaltjahren verursacht werden.
In Ihrem Fall interessiert Sie nur die Anzahl der Tage. Verwenden Sie diese Option am besten,
timedelta
da dadurch eine zusätzliche Abhängigkeit vomdateutil
Paket vermieden wird .quelle
A
relativedelta
hat viel mehr Parameter als atimedelta
:mit denen Sie beispielsweise den letzten Freitag eines Monats berechnen können:
quelle
Ein Hauptunterschied, der in anderen Antworten nicht hervorgehoben wird, ist das Vorhandensein von Singular- und Pluralnomen für jedes Zeitdifferenzprimitiv. Während
timedelta
nur über Angebote Substantive Plural (zBhours
,days
) relative Zeitdifferenz bezeichnenrelativedelta
Angebote Singular als auch (zBhour
,day
) absolute Zeitinformation zu bezeichnen.Dies geht aus der Definition der beiden Klassen hervor:
Was genau macht die Singularform? Die Singularform erzeugt ein Delta, das beim Hinzufügen zu einem
datetime
Objekt das bestimmte Datums- / Uhrzeitprimitiv imdatetime
Objekt auf das in derrelativedelta
. Hier ist ein kleines Beispiel:Dies kann dazu führen,
relativedelta
dass einige interessante Anwendungen verwendet werden, deren Implementierung kompliziert sein kanntimedelta
. Eine, die schnell in den Sinn kommt, ist die Abrundung.Eine interessante Anwendung: Schnell abrunden
Ich werde Ihnen jetzt zeigen, wie
relativedelta
aussagekräftiger es ist, eindatetime
Objekt auf die nächste Minute, Stunde, Tag usw. abzurunden .Auf die nächste Stunde abrunden:
Beachten Sie, wie einfach es ist, abzurunden mit
relativedelta
:Andere kompliziertere Abrundungen sind mit leicht zu erreichen
relativedelta
. Beachten Sie jedoch, dass alle Abrundungen, die von durchgeführt werdenrelativedelta
können, auch mitdatetime
Funktionen undtimedelta
nur etwas komplizierter durchgeführt werden können.quelle