如何在c#中获取一个月的日期数

如何获取特定年份特定工作日的所有日期,例如:

Monday : 07.01.2015,14.01.2015,...,21.02.2015, ,28.12.2015 Tuesday : 08.01.2015, 15.01.2015,..., 22.02.2015, 29.12.2015 

等……

谢谢

 public static IEnumerable DaysInMonth(int year, int month, DayOfWeek dow) { DateTime monthStart = new DateTime(year, month, 1); return Enumerable.Range(0, DateTime.DaysInMonth(year, month)) .Select(day => monthStart.AddDays(day)) .Where(date => date.DayOfWeek == dow) .Select(date => date.Day); } 

你的例子:

 var wednesdaysInSeptember2015 = DaysInMonth(2015, 9, DayOfWeek.Wednesday); Console.Write(String.Join(",", wednesdaysInSeptember2015)); // 2,9,16,23,30 

对于它的价值,这是一个性能优化版本:

 public static IEnumerable DaysInMonthMicroOptimized(int year, int month, DayOfWeek dayOfWeek) { DateTime monthStart = new DateTime(year, month, 1); int distanceToDayOfWeek = (dayOfWeek < monthStart.DayOfWeek ? 7 : 0) + dayOfWeek - monthStart.DayOfWeek; DateTime dayOfWeekInMonth = monthStart.AddDays(distanceToDayOfWeek); yield return dayOfWeekInMonth.Day; while((dayOfWeekInMonth = dayOfWeekInMonth.AddDays(7)).Month == month) yield return dayOfWeekInMonth.Day; }