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

时间:2010-05-13 14:43:17

标签: c# datetime dayofweek

如果我正在编写一些C#代码,这些代码会运行一年的日期(按天迭代),并希望每个月的第3个星期一都能发生特殊情况,我该如何实现?

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

4 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:8)

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

这是一个相当简单的方法,它将确定给定年份中某一特定日期的第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));
}

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

public static int DayOccurrence(DateTime date)
{
    return (int)Math.Ceiling(date.Day / 7.0);
}

答案 2 :(得分:1)

查找15日到21日之间的星期一,包括在内。

答案 3 :(得分:0)

我不知道是否有一个日期操作库来做你想做的事情,但你可以很容易地编写自己的函数:

using System;

class Program {
    static void Main(string[] args) {
        int year = 2010;
        int month = 05;
        DateTime thirdMonday = ThirdMonday(year, month);
    }

    private static DateTime ThirdMonday(int year, int month) {
        for (int day = 1; day <= DateTime.DaysInMonth(year, month); ++day) {
            DateTime dt = new DateTime(year, month, day);
            if (dt.DayOfWeek == DayOfWeek.Monday) {
                return dt.AddDays(14);
            }
        }
        // this should never happen
        throw new Exception();
    }
}