python - 有效的日期范围重叠计算?

标签 python date date-range

我有两个日期范围,每个范围都由开始和结束日期确定(显然,datetime.date 实例)。这两个范围可以重叠也可以不重叠。我需要重叠的天数。当然,我可以用两个范围内的所有日期预先填充两个集合并执行集合交集,但这可能效率低下……除了使用长 if 的另一个解决方案之外,还有更好的方法吗? elif 部分涵盖所有情况?

最佳答案

  • 确定两个开始日期中的最晚日期和两个结束日期中最早的日期。
  • 通过减去它们来计算时间增量。
  • 如果增量为正,则为重叠天数。

这是一个计算示例:

>>> 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

关于python - 有效的日期范围重叠计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9044084/

相关文章:

python - 从表创建字典 - python

java - 改变Java的日期格式

javascript - toLocaleDateString 返回字符串而不关心语言环境

java - Android 时间类 - 毫秒回到时间?

Django 表单中的日期范围字段

python - distil 网络机器人检测的工作

python - 按多个值过滤字典

google-apps-script - 改为24小时。 DateRangeFilter 的模式

MySQL:匹配在两个日期之间有 x 个连续日期可用的记录

python - SQLAlchemy-连续体和 Pyramid : UnboundExecutionError