Aquí hay un enfoque ligeramente diferente. La primera parte es para fines ilustrativos.
Crea una matriz de entradas que representa la línea de tiempo completa de todos los trabajos. Esto puede ser en horas, minutos o lo que sea que necesite. Asumiré horas. Encuentre la hora de inicio más temprana y la última hora de finalización para establecer el tamaño de la matriz. Inicializa todos los elementos a cero.
Recorra en bucle cada trabajo, incrementando el contador en la línea de tiempo por cada hora que se está ejecutando el trabajo. Entonces, si un trabajo se ejecuta desde las 3 p.m. hasta las 5 p.m., son dos horas, por lo que aumentaría el intervalo de 3 horas y 4 horas para indicar que se estaba ejecutando un trabajo durante esas horas.
Pasa a través de la línea de tiempo, teniendo en cuenta cuántos ceros encuentras. Esos son los intervalos de tiempo en los que no se estaba ejecutando ningún trabajo.
Ahora, si usted entiende eso, es bastante fácil deshacerse de la matriz. En lugar de crear una matriz (potintially large), solo haga un seguimiento de la hora de inicio y finalización de toda la línea de tiempo. Por cada hora en ese rango recorra todos sus trabajos y vea cuántos se están ejecutando durante ese tiempo. Cualquiera que sea cero son tiempos inactivos.
este es el enfoque que pensé tomar, ya que evita problemas con trabajos que se envuelven en la medianoche. – MikeJ