如何解决如何在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。