логика, позволяющая определить, перекрываются ли два периода времени (включая случаи с ночевкой)

#datetime #math #logic

Вопрос:

Нужна помощь в логике, чтобы определить, перекрываются ли два периода времени

Предположение:

  1. Период времени составляет менее 24 часов
  2. Если время окончания меньше времени начала, это ночной период
  3. Границы периода времени не являются включающими (т. е. 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. Исправлены ошибочные условия