得知2009/1/1為該月的第一個星期四…
200/1/8為第二個星期四…
以此類推…
當有人問你2009的1月第三個星期二是幾號…
平常你可以看日曆最快…
但這樣的東西要怎樣用程式去算出來…
這聽起來似乎很難…
因為每個月的起始都不同…
有可能會有的星期w會有五個…
先講算法…
首先要做的是先知道該月的1號是星期幾x…
算出第一個w是幾號…
判斷w是否大於等於x…
大於等於時…f=1+(w-x)
小於時…f=1+[(7-x)+w)]
此時f就是第一個星期w的日期了…
再來就是看需要計算第幾個星期w…
ans=f+7*(n-1)
以下是程式…
1 2 3 4 5 6 7 8 9 10 11 12 13
| DateTime firstDay = DateTime.Now.AddDays(-(DateTime.Now.Day - 1)); DayOfWeek queryDay = DayOfWeek.Tuesday; DateTime firstWeek, ans; int week = 3; if ((int)queryDay >= (int)firstDay.DayOfWeek) { firstWeek = firstDay.AddDays((int)queryDay - (int)firstDay.DayOfWeek); } else { firstWeek = firstDay.AddDays(7 - (int)firstDay.DayOfWeek + (int)queryDay); } ans = firstWeek.AddDays(7 * (week - 1));
|
上面是在說從前面算起第n個星期w…
那我要算最後一個星期w呢…
算法改一下…
變成從月底來計算…
底下就直接看程式了…
1 2 3 4 5 6 7 8 9
| DateTime lastDay = (firstDay.AddMonths(1)).AddDays(-1); if ((int)lastDay.DayOfWeek >= (int)queryDay) { ans = lastDay.AddDays(-((int)lastDay.DayOfWeek - (int)queryDay)); } else { ans = lastDay.AddDays(-(7 - (int)queryDay + (int)lastDay.DayOfWeek)); }
|