2013-10-03 3 views
2

мне нужно, чтобы получить предыдущий рабочий день:Получить предыдущий рабочий день

public DateTime GetPreviousWorkDay(DateTime date) 
{ 
    DateTime prevDay = date.AddDays(-1); 
    bool isHoliday = IsHoliday(prevDay); 
    while (isHoliday || prevDay.DayOfWeek == DayOfWeek.Saturday || prevDay.DayOfWeek == DayOfWeek.Sunday) 
    { 
     prevDay = prevDay.AddDays(-1); 
     isHoliday = IsHoliday(prevDay); 
    } 
    return prevDay; 
} 

Является ли этот метод безопасен? Может ли это быть бесконечным циклом? Есть ли более простой способ?

+10

Выглядит хорошо для меня. Как насчет того, что вы просто проверяете это и узнаете? Что вызвало этот вопрос? Что вы подразумеваете под «это безопасный метод»? – tnw

+2

Вы проверили его с помощью DateTime.MinValue? –

+1

Как и все остальное, «безопасность» этого метода будет зависеть от определения 'IsHoliday' ... –

ответ

17

Чтобы сделать логику более ясной, я извлек метод IsWeekend и удалил ненужные временные переменные. Простой do..while цикл будет выполнять работу:

public DateTime PreviousWorkDay(DateTime date) 
{ 
    do 
    {   
     date = date.AddDays(-1);   
    } 
    while(IsHoliday(date) || IsWeekend(date)) 

    return date; 
} 

private bool IsWeekend(DateTime date) 
{ 
    return date.DayOfWeek == DayOfWeek.Saturday || 
      date.DayOfWeek == DayOfWeek.Sunday; 
} 
+0

вы можете создавать статические методы. Будет лучше. – Xaruth

+2

@Xaruth Как так? – tnw

+0

@tnw например: private static bool IsWeekend (DateTime date) {...} – Xaruth

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