从数据库中排除天数而不是列表

时间:2014-03-17 15:55:59

标签: c# database datetimepicker

所以这里是我必须从日期获得结束时间并从日历中排除星期六和星期日和特定日期,所以我已经使用列表,但我需要使用数据库,因为我可能需要添加一些额外假期到时候,我有数据库和一切设置添加我只需要获取功能,将正确读取数据库中的日期并排除它们

这是我用list创建它的代码:

    List<DateTime> Holidays = new List<DateTime>() 
    { 
        new DateTime(2014, 01, 01), 
        new DateTime(2014, 04, 18), 
        new DateTime(2014, 12, 24), 
        new DateTime(2014, 12, 25), 
        new DateTime(2014, 12, 26),
        new DateTime(2014, 12, 31) 
    };

    public Form1()
    {
       InitializeComponent();
    }

    DateTime AddBusinessDays(int days, DateTime starDate)
    {          
        DateTime tempdt = new DateTime(starDate.Year, starDate.Month, starDate.Day);           
        tempdt = ExHolidays(tempdt, Holidays);
        if (tempdt > starDate.Date && !(days == 0))
             tempdt = tempdt.AddDays(-1);
        days = days - 1;
        while (days > 0)
        {
             tempdt = tempdt.AddDays(1);
             // ja sakuma diena ir brivdiena >>> nakamas darbadienas -1
             tempdt = ExHolidays(tempdt, Holidays);
             days = days - 1;
         }          
        return tempdt;            
    }

    DateTime ExHolidays(DateTime startDate, List<DateTime> holidays)
    {
        while (!IsWorkDay(startDate, holidays))
        {
            startDate = startDate.AddDays(1);
        }
        return startDate;
    }

    bool IsWorkDay(DateTime startDate, List<DateTime> holidays)
    {          
        if ((startDate.DayOfWeek == DayOfWeek.Saturday || startDate.DayOfWeek == DayOfWeek.Sunday ||holidays.Contains(startDate)))
        {
            return false;
        }
        else
        {
            return true;
        }
    }

这是我如何执行它,例如添加30个工作日:

dateTimePicker2.Value = AddBusinessDays(30, dateTimePicker1.Value);

一切正常我只想增加额外的假日日期,我认为最好的方法是通过数据库

1 个答案:

答案 0 :(得分:1)

这实际上取决于您想要展示的假期。有些假期是固定的,而有些则是一个月的第X天。例如,感恩节始终是第四个星期四,所以你需要一个足够灵活的数据库设计来捕获它,然后在你的应用程序中构建将第四个星期四转换为实际日期的能力。

但是,数据库选项很不错,因为您只能撤回在您向用户显示的日期内存在的假期,而不必在代码中以可编程方式执行此操作。