#datetime #math #logic
Вопрос:
Нужна помощь в логике, чтобы определить, перекрываются ли два периода времени
Предположение:
- Период времени составляет менее 24 часов
- Если время окончания меньше времени начала, это ночной период
- Границы периода времени не являются включающими (т. е.
06:00-07:00
не пересекается с07:00-08:00
ни05:00-06:00
)
Пример: A = (07:00-17:00)
P = (12:00-22:00)
N = (22:00-08:00) (overnight)
Какова логика определения того, совпадает ли какой-либо данный период времени с A, P или N
Комментарии:
1. Значит
11:00-11:00
, 0 часов (а не 24 часа)? Совпадает ли это с10:00-12:00
?2. макс 23 часа 59 минут (11:00-10:59) и минута 1 минута (00:00-00:01)
Ответ №1:
Возможно, самый простой способ выявить факт пересечения-это разделить ночевки на пары интервалов, так что
N = (22:00-08:00)
становится N1 = (22:00-24:00)
и N2 = (00:00-08:00)
После этого сделайте простое пересечение интервалов:
if (C.Start >= N1.End or C.End <= N1.Start) and (C.Start >= N2.End or C.End <= N2.Start):
no intersection
second comparison if C consists of two intervals too
Похоже, что границы «не включающие» не влияют на правильность сравнения
Существуют специальные методы для угловых интервалов, но их использование здесь выглядит как чрезмерное усложнение.
Комментарии:
1. Можете ли вы подробно объяснить логику необходимых проверок с точки зрения времени начала и времени окончания?
2. Исправлены ошибочные условия