अन्य उत्तरों में हाइलाइट किया गया एक प्रमुख अंतर प्रत्येक समय अंतर आदिम के लिए एकवचन और बहुवचन संज्ञाओं की उपस्थिति है। जबकि timedeltaकेवल प्रस्तावों संज्ञाओं बहुवचन (जैसे hours, days) सापेक्ष समय अंतर, निरूपित करने के लिए relativedeltaएकवचन संज्ञाओं प्रदान करता है और साथ ही (जैसे hour, day) पूर्ण समय की जानकारी निरूपित करने के लिए।
यह 2 वर्गों की परिभाषा से स्पष्ट है:
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)
अब, वास्तव में क्या विलक्षण रूप है? विलक्षण रूप एक डेल्टा बनाता है जो जब किसी datetimeऑब्जेक्ट में जोड़ा जाता है , तो उस निर्दिष्ट datetimeऑब्जेक्ट में समय / समय आदिम निर्धारित करता है जिसमें उल्लेख किया गया है relativedelta। यहाँ एक छोटा सा उदाहरण है:
>>> 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)
इससे relativedeltaकुछ दिलचस्प अनुप्रयोगों के लिए उपयोग किया जा सकता है, जो कि उपयोग करने के लिए जटिल हो सकते हैं timedelta। एक जो जल्दी से दिमाग में आता है वह है गोल-गोल।
एक दिलचस्प अनुप्रयोग: जल्दी से बंद दौर
अब मैं आपको दिखाऊंगा कि relativedeltaकिसी datetimeवस्तु को निकटतम मिनट, घंटा, दिन इत्यादि के चक्कर लगाते समय और अधिक अभिव्यक्त कैसे किया जाता है।
निकटतम घंटे के लिए राउंडिंग:
ध्यान दें कि इसका उपयोग करके राउंड-ऑफ करना कितना सीधा है 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)
अन्य अधिक जटिल गोल-अप आसानी से उपयोग करने योग्य हैं relativedelta। हालांकि, ध्यान दें कि सभी राउंड-ऑफ जो कि किया जा सकता है , फ़ंक्शन relativedeltaका उपयोग करके भी किया जा सकता है datetimeऔर timedelta, केवल थोड़ा अधिक जटिल तरीके से।
dateime.timedeltaजो कि आप क्या चाहते हैं और बाहरीdateutilपैकेज पर निर्भरता से बचेंगे।