请问 Python 判断 2 个时间段是否有交集 有什么好的方法吗?

2017-08-22 22:31:58 +08:00
 gogobody

时间为 datetime 对象。 start_time1 , end_time1 和 start_time2 , end_time2 判断这 2 个时间段是否有交集有什么好的方法吗?我只会用 if 按照条件判断,感觉很笨重。 请教各位 V 友!

8553 次点击
所在节点    Python
14 条回复
zhjits
2017-08-22 22:57:40 +08:00
start_time1 < start_time2 < end_time1 or start_time2 < start_time1 < end_time2
autoxbc
2017-08-22 23:22:58 +08:00
无交集
start_time1 < end_time2 || start_time2 < end_time1
有交集
上面取反
lcdtyph
2017-08-22 23:32:12 +08:00
@autoxbc 你再考虑一下…
lcdtyph
2017-08-22 23:33:29 +08:00
max(start1, start2)<min(end1, end2)就相交了
am241
2017-08-22 23:35:38 +08:00
(s2-e1)*(s1-e2) < 0
wisej
2017-08-22 23:45:58 +08:00
@autoxbc 感觉 应该都是>?
autoxbc
2017-08-22 23:57:14 +08:00
@lcdtyph #3
@wisej #6
嗯,写完发现反了,意思到了就行
blankme
2017-08-23 00:09:23 +08:00
记两组数据为(x1, x2) (y1, y2)
它们有交集的条件是:

arctan(y2/x1) > 1 && arctan(y1/x2) < 1
blankme
2017-08-23 00:10:42 +08:00
@blankme
写错了,应该是 tan,而不是 arctan
Or2
2017-08-23 06:33:54 +08:00
好奇为啥没人说是 S 2 -E1 <0
wisej
2017-08-23 08:14:50 +08:00
设 a 为 各个活动持续时间之和
设 b 为 max(E1,E2,...,EN) - min(S1,S2,...,SN)
如果 a > b,说明有交集
u2386
2017-08-23 09:42:00 +08:00
@Or2 同好奇
shuax
2017-08-23 09:50:33 +08:00
@Or2 咦,好像就这么简单啊
shuax
2017-08-23 09:55:10 +08:00
@Or2 错了,这样有可能不相交的,S1>E2

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/385011

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX