获取上一个工作日

Ole*_*ena 5 c# datetime

我需要上一个工作日:

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;
}
Run Code Online (Sandbox Code Playgroud)

这种方法安全吗?它可以是无限循环吗?有更简单的方法吗?

Ser*_*kiy 22

为了使逻辑更清晰,我提取了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;
}   
Run Code Online (Sandbox Code Playgroud)

  • @Xaruth怎么样? (2认同)
  • @Xaruth根本没有回答这个问题.*在这种情况下,静态方法如何更好? (2认同)
  • @tnw不仅在这种情况下,一般情况下.CA1822:http://msdn.microsoft.com/en-us/library/ms245046.aspx (2认同)