Als allgemeine Frage frage ich mich, ob es eine elegantere/effizientere Möglichkeit gibt, dies zu tun. Ich habe eine Funktion, die zwei Anfangs-/Endtupel von Daten vergleicht, die wahr zurückgeben, wenn sie sich schneiden.python date interval intersection
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
so, wenn:
d1 = date(2000, 1, 10)
d2 = date(2000, 1, 11)
d3 = date(2000, 1, 12)
d4 = date(2000, 1, 13)
dann:
>>> date_intersection((d1,d2),(d3,d4))
False
>>> date_intersection((d1,d2),(d2,d3))
True
>>> date_intersection((d1,d3),(d2,d4))
True
usw.
Ich bin neugierig zu wissen, ob es eine weitere pythonic/elegant/effizienter/weniger ausführlich/allgemein besser, Möglichkeit, dies mit vielleicht mxDateTime oder einem cleveren Hack mit timedelta oder set() zu tun?
Eine alternative und nützliche Form wäre für die Funktion eines Start/Ende Tupel der Kreuzung zurück, wenn ein
Dank
Sie sollten Timedeltas verwenden, um die Dauer von 't1 ⇔ t2' darzustellen und ich denke an das nächste Bit. http://docs.python.org/library/datetime.html#datetime.timedelta – msw