如何在没有周末的情况下获得DateTime.DaysInMonth?

时间:2010-12-19 09:21:05

标签: c# .net datetime

如何在没有星期五和星期六的情况下获得一个月内的C#天数?

3 个答案:

答案 0 :(得分:7)

强制性LINQ解决方案:

int days = Enumerable.Range( 1, DateTime.DaysInMonth( year, month ) )
                     .Select( day => new DateTime( year, month, day ) )
                     .Count( d => d.DayOfWeek != DayOfWeek.Saturday &&
                                  d.DayOfWeek != DayOfWeek.Friday );

答案 1 :(得分:6)

这里,又快又脏:

class Program
{
    static void Main(string[] args)
    {
        int month = DateTime.Today.Month;
        int year = DateTime.Today.Year;

        int daysInMonthMinusFridayAndSaturday = 0;

        for (int i = 1; i <= DateTime.DaysInMonth(year,month); i++)
        {
            DateTime thisDay = new DateTime(year,month,i);
            if(thisDay.DayOfWeek != DayOfWeek.Friday && thisDay.DayOfWeek != DayOfWeek.Saturday)
            {
                daysInMonthMinusFridayAndSaturday += 1;
            }
        }

        Console.WriteLine(daysInMonthMinusFridayAndSaturday);
        Console.ReadLine();
    }
}

答案 2 :(得分:1)

我会避免循环或迭代,并按照这样做:

int GetWorkDays(int year, int month)
{
    var firstDayOfMonth = new DateTime(year, month, 1).DayOfWeek;
    var daysInMonth = DateTime.DaysInMonth(year, month);

    // count whole weeks first            
    var wholeWeeks = daysInMonth / 7;
    var extraDays = daysInMonth % 7;

    // calculate the overlap of the "remainder days" with the weekend.
    var lastDayOfMonth = (int) (firstDayOfMonth + extraDays - 1);
    var overlapStart = Math.Max((int) firstDayOfMonth, (int) DayOfWeek.Friday);
    var overlapEnd = Math.Min(lastDayOfMonth, (int) DayOfWeek.Saturday);
    var weekendOverlap = Math.Max(0, overlapEnd - overlapStart + 1);

    // substract weekend days
    return daysInMonth - wholeWeeks * 2 - weekendOverlap;
}