C#:找出哪个星期一是本月的第3个星期一?

soo*_*ise 5 c# datetime dayofweek

如果我正在编写一些C#代码,这些代码运行一年的日期(按天迭代)并且希望每月的第3个星期一发生一些特殊的事情,我该如何做到这一点?

换句话说,找出当前星期一的哪个星期一是最好的方法是什么?

小智 10

public bool IsThirdMondayOfMonth(DateTime dt)
{
  if(dt.DayOfWeek == DayOfWeek.Monday && dt.Day > 14 && dt.Day <= 21)
  {
    return true;
  }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

  • 更好:`return(dt.DayOfWeek == DayOfWeek.Monday && dt.Day> 14 && dt.Day <22);` (4认同)

Ada*_*son 9

我不认为你的"换句话说"真的重申了你先描述的问题,所以我会回答这两个问题.

这是一个相当简单的方法,它将确定给定年份中给定月份中某一天的特定日期的第n次出现.

public static DateTime DayOccurrence(int year, int month, DayOfWeek day, 
    int occurrenceNumber)
{
    DateTime start = new DateTime(year, month, 1);
    DateTime first = start.AddDays((7 - ((int)start.DayOfWeek - (int)day)) % 7);

    return first.AddDays(7 * (occurrenceNumber - 1));
}
Run Code Online (Sandbox Code Playgroud)

确定一个月的哪个星期一(或任何其他日期)更容易; 只需占用当月/ 7的天花板:

public static int DayOccurrence(DateTime date)
{
    return (int)Math.Ceiling(date.Day / 7.0);
}
Run Code Online (Sandbox Code Playgroud)