星期六到星期六的星期一

Nat*_*han 1 .net c# arrays

在一个月内,我想知道本月的星期一到星期六,例如:2011年10月有

3-oct-2011 to 8-oct-2011,
10-OCt-11 to 15-Oct-11, 
17-Oct-11 to 22-oct-2011,
24-Oct-2011 to 29-Oct-2011 
Run Code Online (Sandbox Code Playgroud)

所有这些日子所有这些日子像3-oct-2011,4-oct-2011 .... 29-oct-11等需要进入数组格式或数据表中.

Joh*_*mer 7

var today = DateTime.Today;
var daysInMonth = DateTime.DaysInMonth(today.Year, today.Month);

var dates = Enumerable.Range(1, daysInMonth)
                            .Select(n => new DateTime(today.Year, today.Month, n))
                            .Where(date => date.DayOfWeek != DayOfWeek.Sunday)
                            .ToArray();
Run Code Online (Sandbox Code Playgroud)

这将查看当前月份的天数,为每个天数创建一个DateTime对象,然后仅将那些不是星期日的日期作为数组返回.

var today = DateTime.Today;
var daysInMonth = DateTime.DaysInMonth(today.Year, today.Month);

var dates = Enumerable.Range(1, daysInMonth)
                            .Select(n => new DateTime(today.Year, today.Month, n))
                            .Where(date => date.DayOfWeek != DayOfWeek.Sunday)
                            .SkipWhile(date => date.DayOfWeek != DayOfWeek.Monday)
                            .TakeWhile(date => date.DayOfWeek != DayOfWeek.Monday || (date.DayOfWeek == DayOfWeek.Monday && daysInMonth - date.Day > 7))
                            .ToArray();
Run Code Online (Sandbox Code Playgroud)

这将做同样的事情,除了摆脱任何星期一 - >星期六范围,不是在当月.(周开始于上个月,或者在下一个月结束).

编辑:

这是一个.NET 2解决方案,它将与我之前发布的LINQ解决方案完全相同.

        DateTime today = DateTime.Today;
        int daysInMonth = DateTime.DaysInMonth(today.Year, today.Month);

        List<DateTime> dates = new List<DateTime>();

        bool foundFirst = false;

        for (int n = 1; n <= daysInMonth; n++)
        {
            var date = new DateTime(today.Year, today.Month, n);

            // Skip untill we find the first Monday of the month.
            if (date.DayOfWeek != DayOfWeek.Monday && !foundFirst)
                continue;

            foundFirst = true;

            // Add all days except Sundays. 
            if (date.DayOfWeek != DayOfWeek.Sunday)
                dates.Add(date);

            int remainingDays = daysInMonth - n;

            // Verify that there are enough days left in this month to add all days upto the next Saturday.
            if (date.DayOfWeek == DayOfWeek.Saturday && remainingDays < 7)
                break;
        }

        DateTime[] dateArray = dates.ToArray();
Run Code Online (Sandbox Code Playgroud)