如何在C#中计算每月的第二个星期五[重复]

问题描述

||                                                                                                                   这个问题已经在这里有了答案:                                                      

解决方法

@druttka的变化很小:使用扩展方法。
 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));
 }
然后这样称呼它:
 for (int i = 1; i < 13; i++)
 {
      Console.WriteLine(new DateTime(2011,i,1).NthOf(2,DayOfWeek.Friday));
 }
    ,我会去这样的事情。
    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;
    }
    ,未经测试,但这应该抓住它。
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();
    ,经过全面测试:
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
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...