排除节假日的日期加法

  • 功能运行环境:节假日数据存放在数据库表中,格式如下

   

  //判断日期是否是节假日
        private bool IsHoliday(DateTime dt)
        {
            Database db = DatabaseFactory.CreateDatabase("SQLDBConnection");
            string sql = @"SELECT count(*)
                             FROM [OA_Sys_Holiday]
                            WHERE [Date] = @startTime";
            bool result = false;
            using (DbCommand comm = db.GetSqlStringCommand(sql))
            {
                db.AddInParameter(comm, "@startTime", DbType.String, dt.ToShortDateString());
                if ((int)db.ExecuteScalar(comm) > 0)
                {
                    result = true;
                }
            }

            return result;
        }

        //日期加法(排除节假日)
        private DateTime AddDayWithoutHoliday(DateTime startDate,int days)
        {
            while (IsHoliday(startDate))//跳过节假日(保证开始时间不是节假日):如果开始时间是节假日,找到节假日的结束时间作为起始时间
            {
                startDate=startDate.AddDays(1);
                DateTime dt = startDate.Date;
                startDate = dt;
            }
            for (int i = 0; i < days; i++)
            {
                startDate = startDate.AddDays(1);
                if (IsHoliday(startDate))
                {
                    do
                    {
                        startDate = startDate.AddDays(1);
                    } while (IsHoliday(startDate));
                }
            }
            return startDate;
        }

原文地址:https://www.cnblogs.com/andy65007/p/1261252.html