2009-11-25 52 views

Trả lời

16

Không cần phải chạy một vòng lặp cho việc này:

private static DateTime GetLastWeekdayOfMonth(DateTime date, DayOfWeek day) 
{ 
    DateTime lastDayOfMonth = new DateTime(date.Year, date.Month, 1) 
     .AddMonths(1).AddDays(-1); 
    int wantedDay = (int)day; 
    int lastDay = (int)lastDayOfMonth.DayOfWeek; 
    return lastDayOfMonth.AddDays(
     lastDay >= wantedDay ? wantedDay - lastDay : wantedDay - lastDay - 7); 
} 

này có thể dễ dàng được chuyển đổi thành một phương pháp khuyến nông, như vậy:

public static class DateTimeExtensions 
{ 
    public static DateTime GetLastWeekdayOfMonth(this DateTime date, DayOfWeek day) 
    { 
     DateTime lastDayOfMonth = new DateTime(date.Year, date.Month, 1) 
      .AddMonths(1).AddDays(-1); 
     int wantedDay = (int)day; 
     int lastDay = (int)lastDayOfMonth.DayOfWeek; 
     return lastDayOfMonth.AddDays(
      lastDay >= wantedDay ? wantedDay - lastDay : wantedDay - lastDay - 7); 
    } 
} 

... và sau đó có thể được sử dụng trực tiếp từ bất kỳ đối tượng DateTime nào:

DayOfWeek lastSunday = DateTime.Now.GetLastWeekdayOfMonth(DayOfWeek.Sunday); 

Cập nhật: sửa lỗi.

0

Bạn có thể thử một cái gì đó như thế này

DateTime date = new DateTime(2009, 10, 01); 
date = date.AddMonths(1).AddDays(-1); 
while (date.DayOfWeek != DayOfWeek.Sunday) date = date.AddDays(-1); 

hoặc cũng cố gắng

date = date.AddDays(-(int)date.DayOfWeek); 
0
DateTime current = new DateTime(DateTime.Today.Year, 
    10, DateTime.DaysInMonth(DateTime.Today.Year, 10)); 

while (current.DayOfWeek != DayOfWeek.Sunday) 
{ 
    current = current.AddDays(-1); 
} 

Console.WriteLine(current.ToLongDateString()); 

tôi bên trái nó mở kết thúc để bạn có thể trao đổi trong tháng với một tham số khá dễ dàng.

-2

Xin lỗi

DateTime lastDayOfMonth = new DateTime(date.Year, date.Month, 1) 
     .AddMonths(1).AddDays(-1); 

là SAI!

=> DateTime lastDayOfMonth = new DateTime(aYear, aMonth, DateTime.DaysInMonth(aYear, aMonth)); 
Các vấn đề liên quan