Я работал в очень похожей задаче. Идея заключается в том, чтобы определить, что у вас есть два периода, скажем, ваше «ночное время» и период, который вы хотите сравнить. если вместо периодов вы рассматриваете эти интервалы как наборы, пересечение между этими двумя наборами - это ночное время.
Так, например, допустим, что ваш интервал составляет от 2019-09-30 13:00:00
до 2019-10-01 08:00:00
(используя datetime,конечно). Итак, ваше ночное время составляет от 2019-09-30 22:00:00
до 2019-10-01 07:00:00
, пересечение составляет от 2019-09-30 22:00:00
до 2019-10-01 07:00:00
, которые фактически являются ночным периодом, а остальное - дневным. Если у вас есть интервалы, вы можете легко рассчитать количество времени в диапазоне.
Вы можете использовать Диапазон моментов , чтобы помочь вам.