C#如何获取一个月中的第几天
How to get the day number in a month in 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<int> 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<int> 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;
}
如何获取特定年份特定工作日的所有日期,例如:
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<int> 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<int> 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;
}