如何判断两个无限重复时间区间未来是否重叠?
如何判断两个无限重复时间区间链未来是否重叠?
我用以下三个参数构建无限重复的时间区间链:
startTime(区间链的起始时间) repeatEveryMinuteInterval(重复间隔,单位:分钟) duration(单次区间持续时长,单位:分钟)
区间链示例
示例1
StartTime - 15:00 UTC 2022年9月19日 repeatEveryMinuteInterval - 15 duration - 5分钟 15:00 - 15:05 15:15 - 15:20 15:30 - 15:35 15:45 - 15:50 16:00 - 16:05 // 该区间链无限循环
示例2(原文笔误已修正)
StartTime - 03:07 UTC 2022年10月19日 repeatEveryMinuteInterval - 30 duration - 5分钟 03:07 - 03:12 03:37 - 03:42 04:07 - 04:12 // 该区间链无限循环
重叠定义
若两个区间存在部分时间重叠(哪怕是一小段),则视为重叠,例如:
15:30 - 15:45 15:25 - 15:31 二者因共享15:30 - 15:31时间段而重叠
核心问题
由于两个区间链是无限的,如何判断它们在未来是否会出现重叠?
我目前想到两种不太理想的实现思路:
- 直接假设它们会重叠,因为无限集合无法计算出一致结果;
- 计算后续1000次循环的区间并对比,但无法确定迭代次数是否足够,且担心计算耗时。
更新说明
- 若有支持时区或无时区的解决方案,欢迎交流;
- 此前该问题曾关闭,现因得知可解决而重新提问;
- 补充
repeatEveryMinuteInterval >= duration的示例:
示例3
StartTime - 00:00 UTC 2022年9月20日 repeatEveryMinuteInterval - 600(每10小时) duration - 5分钟 00:00 - 00:05 10:00 - 10:05 20:00 - 20:05 // 其他循环区间
示例4
StartTime - 19:02 UTC 2022年9月20日 repeatEveryMinuteInterval - 30 duration - 5分钟 19:02 - 19:07 19:32 - 19:37 20:02 - 20:07 // 其他循环区间
在该示例中,两个区间在以下时间段重叠:
interval 1: 20:00 - 20:05 interval 2: 20:02 - 20:07
内容的提问来源于stack exchange,提问作者Satoshi
相关产品推荐
相关产品推荐

