2016-03-10 16 views
0

У меня есть метод C# как это:Получить часов между двумя датами

public int GetWorkLogHours(DateTime? startDate, DateTime? endDate, string startTime, string endTime) 
{ 
} 

У меня есть таблица праздника, в котором сохраняются все праздники. Предполагается, что этот метод должен вычислить количество часов между startDate и startTime до endDate и endTime.It необходимо исключить выходные дни, а также пропустить отпуск между двумя датами.

Для примера:

Мы работаем с понедельника по пятницу с 9:00 до 17:00 часов (8 часов). Если startDate (1-3-2016) и startTime (9:00) и endDate (10-3-2016) и endTime (13:00). В моем праздничном столе (8-3-2016) это праздник, тогда он должен вернуться 52 часа

ответ

1

Я надеюсь, что это решит вашу проблему.

string start = "2016-01-07 09:00:00.000"; 
string end = "2016-01-07 17:00:00.000"; 
DateTime firstDay = Convert.ToDateTime(start); 
DateTime lastDay = Convert.ToDateTime(end); 

if (firstDay > lastDay) 
{ 

} 
else 
{ 
    TimeSpan span = lastDay - firstDay; 
    int businessDays = span.Days + 1; 
    int fullWeekCount = businessDays/7; 

    if (businessDays > fullWeekCount * 7) 
      { 
       int firstDayOfWeek = (int)firstDay.DayOfWeek; 
       int lastDayOfWeek = (int)lastDay.DayOfWeek; 
       if (lastDayOfWeek < firstDayOfWeek) 
        lastDayOfWeek += 7; 
       if (firstDayOfWeek <= 6) 
       { 
        if (lastDayOfWeek >= 7) 
         businessDays -= 2; 
        else if (lastDayOfWeek >= 6) 
         businessDays -= 1; 
       } 
       else if (firstDayOfWeek <= 7 && lastDayOfWeek >= 7) 
        businessDays -= 1; 
      } 

    businessDays -= fullWeekCount + fullWeekCount; 
} 

double hours = 8 * businessDays; 

также, если у вас есть массив праздников, как, DateTime[] bankHolidays то вы можете исключить праздники также.

// вычитает количество банковских праздников в течение интервала времени

foreach (DateTime bankHoliday in bankHolidays) 
    { 
     DateTime bh = bankHoliday.Date; 
     if (firstDay <= bh && bh <= lastDay) 
      --businessDays; 
    } 
+0

Это неправильно. Это не вычисляет то, что хочет OP. –

+0

спасибо почти там –

+0

@VVN ваше решение не пропускает выходные дни i.e субботу и воскресенье –

Смежные вопросы