如何计算两个日期之间的假期 C#

How to count number Holidays between 2 dates C#

如何计算数据库中 2 天之间的假期数

我已经计算了工作日的天数,但我如何减去工作日来计算 2 天之间的假期天数。

假设我有一个 Holidays table 和

日期:

答案应该是:工作日 - 2 个日期之间的假期数;

这是我的代码:

 public static void GetBusinessDays(DateTime startD, DateTime endD)
 {
            double calcBusinessDays =
                1 + ((endD - startD).TotalDays * 5 -
                (startD.DayOfWeek - endD.DayOfWeek) * 2) / 7;

            if (endD.DayOfWeek == DayOfWeek.Saturday) calcBusinessDays--;
            if (startD.DayOfWeek == DayOfWeek.Sunday) calcBusinessDays--;

            MessageBox.Show(" " + calcBusinessDays);
        } 

来自这个 link :Calculate the number of business days between two dates?

按钮:

 private void button1_Click(object sender, EventArgs e)
        {
            GetBusinessDays(Convert.ToDateTime(metroDateTime1.Value.ToString("yyyy-MM-dd")), Convert.ToDateTime(metroDateTime2.Value.ToString("yyyy-MM-dd")));
        }

PS: 我是 c# 新手

虽然只有

while (Start.Date <= End.Date) 
{ 
    if (Start.DayOfWeek == DayOfWeek.Saturday || Start.DayOfWeek == DayOfWeek.Sunday) 
        holidays++; 
    Start = Start.AddDays(1);
}

可以计算假期计数,但下面的代码更有效,因为我们已经知道每 7 天有 2 个假期,不必经过它,只检查 days % 7(最多6天)节假日就够了

int days = (int)(End - Start).TotalDays + 1;
        int holidays = days / 7 * 2;
        int remain = days % 7;
        DateTime dt = End.AddDays(-remain);
        while (dt.Date <= End.Date)
        {
            if (dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday)
                holidays++;
            dt = dt.AddDays(1);
        }
        int year = Start.Year;
        do
        {
            dt = new DateTime(year, 12, 25); //is chritsmass right?
            if (dt >= Start && dt <= End && dt.DayOfWeek!=DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday) holidays++;
            dt = new DateTime(year, 7, 4); // 4th of july
            if (dt >= Start && dt <= End && dt.DayOfWeek!=DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday) holidays++;
            dt = new DateTime(year, 10, 31); // holoween
            if (dt >= Start && dt <= End && dt.DayOfWeek!=DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday) holidays++;
            year++;
        } while (year <= End.Year);
        int businessDays = days - holidays;

Live Demo