Hen*_*man 12
找不到一个方便的单行,但这个工作:
static DateTime LastDayOfWeekInMonth(DateTime day, DayOfWeek dow)
{
DateTime lastDay = new DateTime(day.Year, day.Month, 1).AddMonths(1).AddDays(-1);
DayOfWeek lastDow = lastDay.DayOfWeek;
int diff = dow - lastDow;
if (diff > 0) diff -= 7;
System.Diagnostics.Debug.Assert(diff <= 0);
return lastDay.AddDays(diff);
}
Run Code Online (Sandbox Code Playgroud)
获取下个月的第一天,然后找到该月的第一个工作日.回到七天,你就是在正确月份的最后一周的那个工作日:
DateTime date = new DateTime(2009, 3, 12);
DayOfWeek day = DayOfWeek.Sunday;
DateTime nextMonth = new DateTime(date.Year, date.Month, 1).AddMonths(1);
while (nextMonth.DayOfWeek != day) {
nextMonth = nextMonth.AddDays(1);
}
DateTime lastInMonth = nextMonth.AddDays(-7);
Run Code Online (Sandbox Code Playgroud)
(您可以使用一些算法来替换循环,该算法根据DayOfWeek值的数值计算要添加的天数,但这更直接.)
编辑:
您当然也可以获得当月的最后一天,然后向后循环,直到找到正确的工作日.
static DateTime LastDateOfWeekForMonth(DayOfWeek weekday, int month, int year)
{
DateTime d = new DateTime(year, month, 1).AddMonths(1);
while (!(d.DayOfWeek == weekday && d.Month == month))
{
d = d.AddDays(-1);
}
return d;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5826 次 |
| 最近记录: |