计算一个月的最后一天DayOfWeek

Rya*_*yan 6 c# datetime

给定DateTime和DayOfWeek应该返回该月的最后一个DayOfWeek的日期.

例如2009年3月1日和周日将于2009年3月29日回归

Hen*_*man 12

找不到一个方便的单行,但这个工作:

static DateTime LastDayOfWeekInMonth(DateTime day, DayOfWeek dow)
{
    DateTime lastDay = new DateTime(day.Year, day.Month, 1).AddMonths(1).AddDays(-1);
    DayOfWeek lastDow = lastDay.DayOfWeek;

    int diff = dow - lastDow;

    if (diff > 0) diff -= 7;

    System.Diagnostics.Debug.Assert(diff <= 0);

    return lastDay.AddDays(diff);
}
Run Code Online (Sandbox Code Playgroud)


TFD*_*TFD 11

http://datetimeextensions.codeplex.com/有一个Last(dayOfWeek)扩展方法,可以为您完成此操作

测试包括:-)


Guf*_*ffa 6

获取下个月的第一天,然后找到该月的第一个工作日.回到七天,你就是在正确月份的最后一周的那个工作日:

DateTime date = new DateTime(2009, 3, 12);
DayOfWeek day = DayOfWeek.Sunday;

DateTime nextMonth = new DateTime(date.Year, date.Month, 1).AddMonths(1);
while (nextMonth.DayOfWeek != day) {
    nextMonth = nextMonth.AddDays(1);
}
DateTime lastInMonth = nextMonth.AddDays(-7);
Run Code Online (Sandbox Code Playgroud)

(您可以使用一些算法来替换循环,该算法根据DayOfWeek值的数值计算要添加的天数,但这更直接.)

编辑:
您当然也可以获得当月的最后一天,然后向后循环,直到找到正确的工作日.


Pro*_*ame 5

static DateTime LastDateOfWeekForMonth(DayOfWeek weekday, int month, int year)
{
    DateTime d = new DateTime(year, month, 1).AddMonths(1);
    while (!(d.DayOfWeek == weekday && d.Month == month))
    {
       d = d.AddDays(-1);
    }
    return d;
}
Run Code Online (Sandbox Code Playgroud)