अन्य उत्तरों में हाइलाइट किया गया एक प्रमुख अंतर प्रत्येक समय अंतर आदिम के लिए एकवचन और बहुवचन संज्ञाओं की उपस्थिति है। जबकि 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
पैकेज पर निर्भरता से बचेंगे।