Efficient date range overlap calculation in python?

后端 未结 7 1224
南旧
南旧 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:27

    • Determine the latest of the two start dates and the earliest of the two end dates.
    • Compute the timedelta by subtracting them.
    • If the delta is positive, that is the number of days of overlap.

    Here is an example calculation:

    >>> from datetime import datetime
    >>> from collections import namedtuple
    >>> Range = namedtuple('Range', ['start', 'end'])
    
    >>> r1 = Range(start=datetime(2012, 1, 15), end=datetime(2012, 5, 10))
    >>> r2 = Range(start=datetime(2012, 3, 20), end=datetime(2012, 9, 15))
    >>> latest_start = max(r1.start, r2.start)
    >>> earliest_end = min(r1.end, r2.end)
    >>> delta = (earliest_end - latest_start).days + 1
    >>> overlap = max(0, delta)
    >>> overlap
    52
    

提交回复
热议问题