添加工作日,排除时间段内节假日
今天在工作中遇到个问题,添加工作日后并没有排除掉周末的两天,想了一上午没想出什么好的思路,后来百度搜了搜,小改了一下。
/// <summary>
/// 添加工作日
/// </summary>
/// <param name="startTime">开始时间</param>
/// <param name="addDays">需要添加的工作日</param>
/// <returns></returns>
public static DateTime AddWorkDays(DateTime startTime, int addDays)
{
DateTime endTime = startTime.AddDays(addDays);
int days = CalculateWeekendDays(startTime, endTime);
while (days > 0)
{
startTime = endTime;
endTime = endTime.AddDays(days);
days = CalculateWeekendDays(startTime, endTime);
}
return endTime;
}
/// <summary>
/// 计算时间段内节假日的天数
/// </summary>
/// <param name="startTime">开始时间</param>
/// <param name="endTime">结束时间</param>
/// <returns></returns>
public static int CalculateWeekendDays(DateTime startTime, DateTime endTime)
{
int count = 0;
//遍历节假日内的日期,当日期等于周六或周日时,count++
for (DateTime dateItem = startTime.AddDays(1); dateItem <= endTime; dateItem = dateItem.AddDays(1))
{
if (dateItem.DayOfWeek == DayOfWeek.Saturday || dateItem.DayOfWeek == DayOfWeek.Sunday)
{
count++;
}
}
return count;
}
static void Main(string[] args)
{
DateTime firstDate = DateTime.Now;
int num = 10;
DateTime lastTime = AddWorkDays(firstDate, num);
Console.WriteLine("{0} 加上{1}个工作日后得到 {2} ",firstDate.ToString(),num,lastTime.ToString());
Console.ReadKey();
}
输出的结果为:
暂时还没发现什么问题,如果发现错误望指正!