जैसा कि आप नीचे देख सकते हैं, मैंने TimeRange क्लास लागू की।
Get_overlapped_range पहले एक साधारण स्थिति द्वारा सभी गैर-अतिव्यापी विकल्पों की उपेक्षा करता है, और फिर सभी संभावित विकल्पों पर विचार करके अतिव्यापी सीमा की गणना करता है।
दिनों की राशि प्राप्त करने के लिए आपको TimeRange मान लेना होगा जो get_overlapped_range से लौटाया गया था और अवधि को 60 * 60 * 24 से विभाजित किया गया था।
class TimeRange(object):
def __init__(self, start, end):
self.start = start
self.end = end
self.duration = self.end - self.start
def is_overlapped(self, time_range):
if max(self.start, time_range.start) < min(self.end, time_range.end):
return True
else:
return False
def get_overlapped_range(self, time_range):
if not self.is_overlapped(time_range):
return
if time_range.start >= self.start:
if self.end >= time_range.end:
return TimeRange(time_range.start, time_range.end)
else:
return TimeRange(time_range.start, self.end)
elif time_range.start < self.start:
if time_range.end >= self.end:
return TimeRange(self.start, self.end)
else:
return TimeRange(self.start, time_range.end)
def __repr__(self):
return '{0} ------> {1}'.format(*[time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(d))
for d in [self.start, self.end]])