可能重复:
How to find the 3rd Friday in a month with C#?如何在C#计算出每月的第二个星期五
大家好,
我已经写了一个小控制台实用工具,吐出线成文本文件。我希望这一行包含当前月份的第二个星期五。有没有办法做到这一点?
谢谢大家!
可能重复:
How to find the 3rd Friday in a month with C#?如何在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));
}
未经测试,但应该抓住它。
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();
我会去做这样的事情。
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;
}
完全测试:
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
我挂的问题基本上是同样的问题。用'DateTime.Now'替换'yourDate'并用8替换15。 – Brandon 2011-05-26 14:18:56
我看了一下。它真的很健壮吗? – 2011-05-26 14:21:09
是的,应该是 – 2011-05-26 14:23:07