7

前の勤務日を取得する必要があります:

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;
}

この方法は安全ですか?それは無限のサイクルになることができますか?もっと簡単な方法はありますか?

4

1 に答える 1

27

ロジックをより明確にするために、メソッドを抽出し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;
}   
于 2013-10-03T14:31:22.450 に答える