Einfache Lösung anhand folgender Erklärung:
Strukturelle Verwaltung der Ausfallsdaten sehen ~so aus:
Delphi-Quellcode:
TAusfallZeit = record
Von: TDateTime;
Bis: TDateTime;
end;
var
AusfallZeiten: Array of TAusfallZeit;
Im AusfallZeiten Array hast du nun die oben gepostete (sortierten) Liste.
Lösungs-Algorithmus
Code:
Schleife 1
- gehe jedes (bis zum Vorletzten) Element e im Array durch
- schau, ob e.Bis > nächstes Element.Von
- Falls ja, dann "merge" sie. dh lösche beide Elemente, erstelle ein Neues, dessen "Von" = e.Von und "Bis" = nächstes Element.Bis
Schleife 2
- Summiere die Stunden von "Von" bis "Bis" auf