C# 检查这个星期一是否是一个月内的最后一个星期一

C# 检查这个星期一是否是一个月内的最后一个星期一,c#,C#,我使用另一个问题的代码: private bool NthDayOfMonth(DateTime date, DayOfWeek dow, int n){ int d = date.Day; return date.DayOfWeek == dow && (d-1)/7 == (n-1); } 它很好用。但它并没有检查最后一天(对我来说是n=5)。如何修改它? 谢谢。让我们以3月30日为例 d = 30, (date.DayOfWeek == DayOfWeek.F

我使用另一个问题的代码:

private bool NthDayOfMonth(DateTime date, DayOfWeek dow, int n){
  int d = date.Day;
  return date.DayOfWeek == dow && (d-1)/7 == (n-1);
}
它很好用。但它并没有检查最后一天(对我来说是n=5)。如何修改它?
谢谢。

让我们以3月30日为例

d = 30,  
(date.DayOfWeek == DayOfWeek.Friday) == true, 
(30-1)=29, 29/7 = 4
4 == (5-1)
所以它起作用了

若要仅检查DayOfWeek是否为月的最后一天,您可以使用

return date.AddDays(7).Month != date.Month;

下面的方法检查给定日期是否为本月最后一周的日期

private bool IsLastOfMonth(DateTime date)
{
    var oneWeekAfter = date.AddDays(7);
    return oneWeekAfter.Month != date.Month;
}
所以有了新的方法,它只在周一检查

private bool IsLastMonday(DateTime date)
{
    if (date.DayOfWeek != DayOfWeek.Monday) 
        return false; // it is not monday

    // the next monday is...
    var oneWeekAfter = date.AddDays(7);

    // and is it in same month?, if it is, that means its not last monday
    return oneWeekAfter.Month != date.Month;
}

请看,请给出一个它不起作用的示例。我添加了一个新方法,用于周一的检查。