Определите пользовательские выходные и начальные и конечные дни и время и найдите их вхождения в диапазоне дат
У меня непростое время при подсчете количества пользовательских выходных, а затем, когда я нахожу их в указанном диапазоне дат, мне приходится применять разные тарифы в зависимости от дней (выходные, сезонные и обычные дни).
Например, поездка начинается 16.08.2017 09:00:00 и заканчивается 29.08.2017 09:00:00, где мои выходные начинаются с пятницы 15:00:00 до понедельника 09:00:00 каждую неделю. Мне нужно подсчитать, сколько выходных происходит в данное время начала и окончания поездки и сколько обычных дней, так как оба тарифа оплачиваются по разным ставкам. Любая помощь приветствуется.
Обратите внимание, что все дата и время будут динамическими и могут быть изменены, поэтому ищите общее решение
1 ответ
Если ваш диапазон достаточно мал, вы можете попробовать:
public class DateTimeRange
{
private DateTime Start { get; set; }
private DateTime End { get; set; }
public DateTimeRange(DateTime start, DateTime end)
{
Start = start;
End = end;
}
public int DayOffsCount()
{
var current = Start;
var dayOffsCount = 0;
while (current < End)
{
if (IsDayOff(current))
{
dayOffsCount++;
}
current = current.AddDays(1);
}
return dayOffsCount;
}
}
public bool IsDayOff(DateTime dt)
{
if (dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday)
return true;
return IsHoliday(dt);
}