【发布时间】:2010-09-15 19:47:28
【问题描述】:
作为一个普遍感兴趣的问题,我想知道是否有更优雅/更有效的方法来做到这一点。我有一个函数可以比较两个日期的开始/结束元组,如果它们相交则返回 true。
from datetime import date
def date_intersection(t1, t2):
t1start, t1end = t1[0], t1[1]
t2start, t2end = t2[0], t2[1]
if t1end < t2start: return False
if t1end == t2start: return True
if t1start == t2start: return True
if t1start < t2start and t2start < t1end: return True
if t1start > t2start and t1end < t2end: return True
if t1start < t2start and t1end > t2end: return True
if t1start < t2end and t1end > t2end: return True
if t1start > t2start and t1start < t2end: return True
if t1start == t2end: return True
if t1end == t2end: return True
if t1start > t2end: return False
如果:
d1 = date(2000, 1, 10)
d2 = date(2000, 1, 11)
d3 = date(2000, 1, 12)
d4 = date(2000, 1, 13)
然后:
>>> date_intersection((d1,d2),(d3,d4))
False
>>> date_intersection((d1,d2),(d2,d3))
True
>>> date_intersection((d1,d3),(d2,d4))
True
等等
我很想知道是否有更 Pythonic/优雅/更高效/更少冗长/通常更好的方法来做到这一点,可能是 mxDateTime 或一些聪明的 hack 使用 timedelta 或 set()?
另一种有用的形式是函数返回交集的开始/结束元组(如果找到)
谢谢
【问题讨论】:
-
您应该使用 timedeltas 来表示
t1 ⇔ t2的持续时间,我正在考虑下一点。 docs.python.org/library/datetime.html#datetime.timedelta
标签: python datetime intersection