Определите пользовательские выходные и начальные и конечные дни и время и найдите их вхождения в диапазоне дат

У меня непростое время при подсчете количества пользовательских выходных, а затем, когда я нахожу их в указанном диапазоне дат, мне приходится применять разные тарифы в зависимости от дней (выходные, сезонные и обычные дни).

Например, поездка начинается 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);
    }
Другие вопросы по тегам