在C#中获得每月的第n个工作日

Pra*_*sad 11 c# date dayofweek

可能重复:
如何确定给定日期是否是该月的第N个工作日?

我怎么得到这个月的第n个工作日?

例如:

2010年7月的第二个星期一= 2010年12月7日.

寻找像这样的功能:

public DateTime GetNthWeekofMonth(DateTime date, int nthWeek, DayOfWeek dayofWeek)
{
//return the date of nth week of month
}
Run Code Online (Sandbox Code Playgroud)

从上面可以看出,函数的参数是("2010年7月的任何日期",2,星期一).

SLa*_*aks 22

使用以下扩展方法:

public static class DateTimeExtensions
{
    ///<summary>Gets the first week day following a date.</summary>
    ///<param name="date">The date.</param>
    ///<param name="dayOfWeek">The day of week to return.</param>
    ///<returns>The first dayOfWeek day following date, or date if it is on dayOfWeek.</returns>
    public static DateTime Next(this DateTime date, DayOfWeek dayOfWeek) { 
        return date.AddDays((dayOfWeek < date.DayOfWeek ? 7 : 0) + dayOfWeek - date.DayOfWeek); 
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以写

new DateTime(2010, 07, 01).Next(DayOfWeek.Monday).AddDays((2 - 1) * 7);
Run Code Online (Sandbox Code Playgroud)

或者,作为一个功能:

public DateTime GetNthWeekofMonth(DateTime date, int nthWeek, DayOfWeek dayOfWeek) {
    return date.Next(dayOfWeek).AddDays((nthWeek - 1) * 7);
}
Run Code Online (Sandbox Code Playgroud)

(我需要减去一个因为date.Next(dayOfWeek)已经是那天的第一次出现)