Ein Hauptunterschied, der in anderen Antworten nicht hervorgehoben wird, ist das Vorhandensein von Singular- und Pluralnomen für jedes Zeitdifferenzprimitiv. Während timedeltanur über Angebote Substantive Plural (zB hours, days) relative Zeitdifferenz bezeichnen relativedeltaAngebote Singular als auch (zB hour,day ) absolute Zeitinformation zu bezeichnen.
Dies geht aus der Definition der beiden Klassen hervor:
Definition: datetime.timedelta([days[, seconds[, microseconds[,
milliseconds[, minutes[, hours[, weeks]]]]]]])
Definition: relativedelta.relativedelta(self, dt1=None, dt2=None,
years=0, months=0, days=0, leapdays=0, weeks=0, hours=0, minutes=0,
seconds=0, microseconds=0, year=None, month=None, day=None,
weekday=None, yearday=None, nlyearday=None, hour=None, minute=None,
second=None, microsecond=None)
Was genau macht die Singularform? Die Singularform erzeugt ein Delta, das beim Hinzufügen zu einem datetimeObjekt das bestimmte Datums- / Uhrzeitprimitiv im datetimeObjekt auf das in der relativedelta. Hier ist ein kleines Beispiel:
>>> import datetime as dt; from dateutil.relativedelta import *
>>> NOW = dt.datetime(2018, 11, 17, 9, 6, 31)
>>> NOW
datetime.datetime(2018, 11, 17, 9, 6, 31)
>>> NOW + relativedelta(hours=1) #Simply add one hour
datetime.datetime(2018, 11, 17, 10, 6, 31)
>>> NOW + relativedelta(hour=1) #Set the hour to 01:00 am
datetime.datetime(2018, 11, 17, 1, 6, 31)
Dies kann dazu führen, relativedeltadass 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 relativedeltaaussagekräftiger es ist, ein datetimeObjekt auf die nächste Minute, Stunde, Tag usw. abzurunden .
Auf die nächste Stunde abrunden:
Beachten Sie, wie einfach es ist, abzurunden mit relativedelta:
#Using `relativedelta`
NOW + relativedelta(hours=1, minute=0, second=0, microsecond=0)
#Using `timedelta`
dt.combine(NOW.date(),dt.time(NOW.hour,0,0)) + dt.timedelta(0,60*60,0)
Andere kompliziertere Abrundungen sind mit leicht zu erreichen relativedelta. Beachten Sie jedoch, dass alle Abrundungen, die von durchgeführt werden relativedeltakönnen, auch mit datetimeFunktionen und timedeltanur etwas komplizierter durchgeführt werden können.
dateime.timedeltadenen Sie das erreichen, was Sie möchten, und vermeiden Sie die Abhängigkeit vom externendateutilPaket.