Như một vấn đề quan tâm chung, tôi tự hỏi nếu có một cách thanh lịch/hiệu quả hơn để làm điều này. Tôi có một hàm so sánh hai bộ bắt đầu/kết thúc của các ngày trả về true nếu chúng giao nhau.giao lộ khoảng thời gian trăn
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
vì vậy nếu:
d1 = date(2000, 1, 10)
d2 = date(2000, 1, 11)
d3 = date(2000, 1, 12)
d4 = date(2000, 1, 13)
thì:
>>> date_intersection((d1,d2),(d3,d4))
False
>>> date_intersection((d1,d2),(d2,d3))
True
>>> date_intersection((d1,d3),(d2,d4))
True
, vv
Tôi tò mò muốn biết nếu có một pythonic hơn/nhã/hiệu quả hơn/ít hơn verbose/thường tốt hơn, cách để làm điều này với có thể mxDateTime hoặc một số thông minh hack với timedelta hoặc set()?
Một hình thức thay thế và hữu ích sẽ cho hàm để trả về một tuple bắt đầu/kết thúc ngã tư nếu ai tìm thấy
Cảm ơn
Bạn nên sử dụng timedeltas để biểu thị thời lượng 't1 ⇔ t2' và tôi đang nghĩ về bit tiếp theo. http://docs.python.org/library/datetime.html#datetime.timedelta – msw