How to calculate 2nd Friday of Month in C# [duplicate]

喜夏-厌秋 提交于 2019-11-28 07:30:45

问题


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

Hi everyone,

I've wrote a little console utility that spits out a line into 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!


回答1:


Slight variation on @druttka: using an 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 called it like this:

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



回答2:


I would go for something like this.

    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;
    }



回答3:


Untested, but this should grab it.

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();



回答4:


fully tested:

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"));
}  

Final results:

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


来源:https://stackoverflow.com/questions/6140018/how-to-calculate-2nd-friday-of-month-in-c-sharp

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!