I do not think that your βin other wordsβ really repeats the problem that you describe in the first place, so I will answer both.
Here's a pretty simple method that will determine the nth occurrence on a specific day of the week for a given month in a given year.
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)); }
Determining which Monday (or any other day) of the month for which it is given is much simpler; just take the ceiling of the day of the month / 7:
public static int DayOccurrence(DateTime date) { return (int)Math.Ceiling(date.Day / 7.0); }
source share