How to calculate second Friday of a month in C #

Possible duplicate:
How to find the third Friday of the month with C #?

Hello everybody,

I wrote a small console utility that spits out a string in a text file. I want this line to include the second Friday of the current month. Is there any way to do this?

Thanks everyone!

+5
source share
4 answers

A slight variation on @druttka: using the extension method.

 public static DateTime NthOf(this DateTime CurDate, int Occurrence , DayOfWeek Day)
 {
     var fday = new DateTime(CurDate.Year, CurDate.Month, 1);

     var fOc = fday.DayOfWeek == Day ? fday : fday.AddDays(Day - fday.DayOfWeek);
     // CurDate = 2011.10.1 Occurance = 1, Day = Friday >> 2011.09.30 FIX. 
     if (fOc.Month < CurDate.Month) Occurrence = Occurrence+1;
     return fOc.AddDays(7 * (Occurrence - 1));
 }

Then it is called like this:

 for (int i = 1; i < 13; i++)
 {
      Console.WriteLine(new DateTime(2011, i,1).NthOf(2, DayOfWeek.Friday));
 }
+10
source

Unconfirmed, but that should grab him.

DateTime today = DateTime.Today;
DateTime secondFriday = 
     Enumerable.Range(8, 7)
               .Select(item => new DateTime(today.Year, today.Month, item))
               .Where(date => date.DayOfWeek == DayOfWeek.Friday)
               .Single();
0
source

- .

    public static DateTime SecondFriday(DateTime currentMonth)
    {
        var day = new DateTime(currentMonth.Year, currentMonth.Month, 1);
        day = FindNext(DayOfWeek.Friday, day);
        day = FindNext(DayOfWeek.Friday, day.AddDays(1));
        return day;
    }

    private static DateTime FindNext(DayOfWeek dayOfWeek, DateTime after)
    {
        DateTime day = after;
        while (day.DayOfWeek != dayOfWeek) day = day.AddDays(1);
        return day;
    }
0

:

for (int mo = 1; mo <= 12; mo++)
{
    DateTime _date = new DateTime(yr, mo, 1);
    DayOfWeek day = _date.DayOfWeek;

    int d = 0;
    if (day == DayOfWeek.Saturday)
        d += 7;

    var diff = DayOfWeek.Friday - day;

    DateTime secFriday = _date.AddDays(diff + 7 + d);
    Console.WriteLine(secFriday.ToString("MM\tddd\tdd"));
}  

:

Month           Date
=====================
01      Fri     14
02      Fri     11
03      Fri     11
04      Fri     08
05      Fri     13
06      Fri     10
07      Fri     08
08      Fri     12
09      Fri     09
10      Fri     14
11      Fri     11
12      Fri     09
0

All Articles