Created
April 11, 2022 12:46
-
-
Save VaclavElias/3de6649428244a92b5480e53498af0a1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var startTime = new DateTime(2022, 4, 11, 8, 0, 0); | |
var endTime = new DateTime(2022, 4, 11, 17, 0, 0); | |
var breaks = new List<(DateTime Start, DateTime End)> | |
{ | |
(new DateTime(2022, 4, 11, 12, 0, 0), new DateTime(2022, 4, 11, 13, 0, 0)), | |
(new DateTime(2022, 4, 11, 15, 0, 0), new DateTime(2022, 4, 11, 15, 30, 0)) | |
}; | |
// Validate breaks, merge them if needed | |
Console.WriteLine($"Worktime: {startTime} - {endTime}"); | |
foreach (var item in breaks) | |
{ | |
Console.WriteLine($"Break: {item.Start} - {item.End}"); | |
} | |
var workingTime = new List<(DateTime Start, DateTime End)>(); | |
var firstBreakStart = GetFirstBreak(); | |
workingTime.Add(new(startTime, firstBreakStart == DateTime.MinValue ? endTime : firstBreakStart)); | |
// no breaks | |
if (firstBreakStart == DateTime.MinValue) | |
{ | |
ShowResult(); | |
return; | |
}; | |
for (var i = 0; i < breaks.Count - 1; i++) | |
{ | |
workingTime.Add(new(breaks[i].End, breaks[i + 1].Start)); | |
} | |
var lastBreakEnd = GetLastBreak(); | |
if (lastBreakEnd != DateTime.MinValue) workingTime.Add(new(lastBreakEnd, endTime)); | |
ShowResult(); | |
DateTime GetFirstBreak() => breaks.OrderBy(s => s.Start).FirstOrDefault().Start; | |
DateTime GetLastBreak() => breaks.OrderBy(s => s.Start).LastOrDefault().End; | |
void ShowResult() | |
{ | |
Console.WriteLine(""); | |
Console.WriteLine(""); | |
foreach (var item in workingTime) | |
{ | |
Console.WriteLine($"Worktime: {item.Start} - {item.End}"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment