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 (zB hours
, days
) relative Zeitdifferenz bezeichnen relativedelta
Angebote 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 datetime
Objekt das bestimmte Datums- / Uhrzeitprimitiv im datetime
Objekt 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, 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, ein datetime
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
:
#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 relativedelta
können, auch mit datetime
Funktionen und timedelta
nur etwas komplizierter durchgeführt werden können.
dateime.timedelta
denen Sie das erreichen, was Sie möchten, und vermeiden Sie die Abhängigkeit vom externendateutil
Paket.