我需要上一个工作日:
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)