public const int DAYS_IN_A_WEEK = 7;
public static void Main()
Console.WriteLine("Hello World");
var firstOfNovember = new DateTime(2019, 11, 1);
Console.WriteLine($"The 4th Thursday of November is: {GetDayOfWeekInstanceOfMonth(firstOfNovember, DayOfWeek.Thursday, 4)}" );
public static DateTime GetDayOfWeekInstanceOfMonth(DateTime firstDayOfMonth, DayOfWeek dow, int nthWeekIndex)
var newDate = new DateTime(firstDayOfMonth.Year, firstDayOfMonth.Month, 1);
if (newDate.DayOfWeek != dow)
var daysOfSeperation = newDate.DayOfWeek - dow;
var dayIncrementValue = Math.Abs(DAYS_IN_A_WEEK - daysOfSeperation) % DAYS_IN_A_WEEK;
newDate = newDate.AddDays(dayIncrementValue);
var daysInMonth = DateTime.DaysInMonth(newDate.Year, newDate.Month);
while (nthWeekIndex * DAYS_IN_A_WEEK + newDate.Day > daysInMonth)
return newDate.AddDays(nthWeekIndex * DAYS_IN_A_WEEK);