Satu perbedaan utama yang tidak disorot dalam jawaban lain adalah adanya kata benda tunggal dan jamak untuk setiap perbedaan waktu primitif. Sementara timedelta
hanya menawarkan kata benda jamak (misalnya hours
, days
) untuk menunjukkan perbedaan waktu relatif, relativedelta
menawarkan 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 datetime
objek, menyetel tanggal / waktu tertentu primitif dalam datetime
objek 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 relativedelta
yang 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 relativedelta
juga dapat dilakukan dengan menggunakan datetime
fungsi dan timedelta
, hanya dengan cara yang sedikit lebih berbelit-belit.
dateime.timedelta
yang akan mencapai apa yang Anda inginkan dan hindari ketergantungan padadateutil
paket eksternal .