可能重複:
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