How to find the 3rd Friday in a month with C#?

后端 未结 19 982
野的像风
野的像风 2020-11-27 06:07

Given a date (of type DateTime), how do I find the 3rd Friday in the month of that date?

19条回答
  •  难免孤独
    2020-11-27 06:51

    I followed User:Mark Ransom's algorithm and wrote a generalized day finder. For example to get the 3rd friday of december 2013,

    int thirdFriday = DayFinder.FindDay(2013, 12, DayOfWeek.Friday, 3);
    

    And here is the function definition. It doesn't have any iterative loops, so its efficient.

      public class DayFinder
      {
    
        //For example to find the day for 2nd Friday, February, 2016
        //=>call FindDay(2016, 2, DayOfWeek.Friday, 2)
        public static int FindDay(int year, int month, DayOfWeek Day, int occurance)
        {
    
            if (occurance <= 0 || occurance > 5)
                throw new Exception("Occurance is invalid");
    
            DateTime firstDayOfMonth = new DateTime(year, month, 1);
            //Substract first day of the month with the required day of the week 
            var daysneeded = (int)Day - (int)firstDayOfMonth.DayOfWeek;
            //if it is less than zero we need to get the next week day (add 7 days)
            if (daysneeded < 0) daysneeded = daysneeded + 7;
            //DayOfWeek is zero index based; multiply by the Occurance to get the day
            var resultedDay = (daysneeded + 1) + (7 * (occurance - 1));
    
            if (resultedDay > (firstDayOfMonth.AddMonths(1) - firstDayOfMonth).Days)
                throw new Exception(String.Format("No {0} occurance(s) of {1} in the required month", occurance, Day.ToString()));
    
            return resultedDay;
        }
    }
    

提交回复
热议问题