Satu perbedaan utama yang tidak disorot dalam jawaban lain adalah adanya kata benda tunggal dan jamak untuk setiap perbedaan waktu primitif. Sementara timedeltahanya menawarkan kata benda jamak (misalnya hours, days) untuk menunjukkan perbedaan waktu relatif, relativedeltamenawarkan kata benda tunggal juga (misalnya hour, day) untuk menunjukkan informasi waktu absolut.
Ini jelas dari definisi 2 kelas:
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)
Sekarang, sebenarnya apa yang dilakukan bentuk tunggalnya? Bentuk tunggal membuat delta yang ketika ditambahkan ke datetimeobjek, menyetel tanggal / waktu tertentu primitif dalam datetimeobjek ke yang disebutkan di relativedelta. Berikut ini contoh kecilnya:
>>> 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)
datetime.datetime(2018, 11, 17, 10, 6, 31)
>>> NOW + relativedelta(hour=1)
datetime.datetime(2018, 11, 17, 1, 6, 31)
Ini bisa menyebabkan relativedelta digunakannya beberapa aplikasi menarik, yang dapat menjadi rumit untuk diterapkan menggunakan timedelta. Salah satu yang cepat terlintas dalam pikiran adalah pembulatan.
Aplikasi yang Menarik: Pembulatan Cepat
Sekarang saya akan menunjukkan cara relativedeltayang lebih ekspresif saat melakukan pembulatan adatetime objek ke menit, jam, hari terdekat, dll.
Pembulatan ke jam terdekat:
Perhatikan betapa mudahnya membulatkan menggunakan relativedelta:
NOW + relativedelta(hours=1, minute=0, second=0, microsecond=0)
dt.combine(NOW.date(),dt.time(NOW.hour,0,0)) + dt.timedelta(0,60*60,0)
Pembulatan lain yang lebih rumit mudah dicapai dengan menggunakan relativedelta. Namun, perhatikan bahwa semua pembulatan yang dapat dilakukan relativedeltajuga dapat dilakukan dengan menggunakan datetimefungsi dan timedelta, hanya dengan cara yang sedikit lebih berbelit-belit.
dateime.timedeltayang akan mencapai apa yang Anda inginkan dan hindari ketergantungan padadateutilpaket eksternal .