Efficient date range overlap calculation in python?

后端 未结 7 1167
南旧
南旧 2020-11-28 02:50

I have two date ranges where each range is determined by a start and end date (obviously, datetime.date() instances). The two ranges can overlap or not. I need the number of

相关标签:
7条回答
  • 2020-11-28 03:37

    I implemented a TimeRange class as you can see below.

    The get_overlapped_range first negates all the non overlapped options by a simple condition, and then calculate the overlapped range by considering all the possible options.

    To get the amount of days you'll need to take the TimeRange value that was returned from get_overlapped_range and divide the duration by 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]])
    
    0 讨论(0)
提交回复
热议问题