2010-11-09 10 views
6

Tôi có một ví dụ ngày "2010/11/09, Thuesday"Lấy thứ hai và chủ nhật cho một DateTime nhất định trong C#

Bây giờ tôi muốn để có được datetime của trong đó lời nói dối thứ hai và chủ nhật ngày nêu trên.

Bạn sẽ làm như thế nào?

+0

@Lisa; bạn có nghĩa là bạn muốn các ngày của thứ hai và chủ nhật trong tuần của thứ ba đó? – BeemerGuy

+0

@Beemer: Với quy ước rằng tuần bắt đầu vào Chủ nhật sẽ không hoạt động. –

+0

@Cảm ơn; có nó sẽ. OP có thể muốn truy xuất chủ nhật bắt đầu tuần thứ Ba. Bất kỳ logic nào cũng có thể miễn là chúng ta không biết chính xác chúng muốn gì. Kiểm tra câu trả lời bên dưới bằng poster "light" để thực hiện điều đó. – BeemerGuy

Trả lời

36

Đây là probaly gì bạn đang sau:

DateTime date = DateTime.Today; 

// lastMonday is always the Monday before nextSunday. 
// When date is a Sunday, lastMonday will be tomorrow.  
int offset = date.DayOfWeek - DayOfWeek.Monday;  
DateTime lastMonday = date.AddDays(-offset); 
DateTime nextSunday = lastMonday.AddDays(6); 

Chỉnh sửa: kể từ lastMonday không phải lúc nào những gì tên cho thấy (xem chú thích), sau một lót có lẽ là nhiều hơn đến điểm :

DateTime nextSunday = date.AddDays(7 - (int) date.DayOfWeek); 
+0

giải pháp tốt đẹp, sạch hơn nhiều so với tôi. – light

+3

Điều này có hai lỗi, một lỗi đánh máy vào thứ Hai.Thêm .. phải là chữ thường 'm' cho thứ hai. Cũng để có được chủ nhật từ thứ hai bạn sẽ thêm 6 ngày không 7. Thêm bảy ngày cung cấp cho bạn thứ hai sau đây. – Banford

+3

Điều này có lỗi khác. Nếu Hôm nay là chủ nhật, nó sẽ trở lại vào thứ hai tới (offset = -1) thay vì thứ hai tuần trước. Truyền dưới dạng số nguyên Chủ nhật sẽ trả về 0 và Thứ Hai sẽ trả về 1, vì vậy Chủ Nhật - Thứ Hai = -1. Thêm dòng này, sẽ sửa lỗi: offset = (offset <0)? 6: bù đắp; – gijswijs

0

Something như thế này, tất nhiên bạn sẽ muốn phá vỡ từ vòng lặp tại một số điểm trước khi DateTime.MaxValue, nhưng điều này nên làm:

DateTime dt = DateTime.Parse("2010-11-09, Thuesday"); 


     while (dt < DateTime.MaxValue) 
     { 

      if(dt.DayOfWeek == DayOfWeek.Sunday || dt.DayOfWeek == DayOfWeek.Monday) 
       Console.WriteLine(dt.ToString()); 
      dt.AddDays(1); 
     } 
0

DateTime Thứ hai = DateTime.Now.AddDays ((DateTime.Now.DayOfWeek - 1) * -1) .Date;

Ngày giờ Chủ Nhật = DateTime.Now.AddDays (7 -DateTime.Now.DayOfWeek) .Date;

+1

Tôi không nghĩ rằng điều này hoạt động vào ngày Chủ nhật. Bạn sẽ không nhận được ngày mai và chủ nhật tới mà không bị ràng buộc hôm nay (chủ nhật)? (0-1) * - 1 = 1, 7-0 = 7. –

0

Đó là một cách dễ dàng nếu bạn sử dụng một phương pháp có điều kiện

if (v_datetime.DayOfWeek== DayOfWeek.Sunday) 
{ 
return true; 
} 

if (v_datetime.DayOfWeek== DayOfWeek.Monday) 
{ 

} 
+0

vui lòng cập nhật câu trả lời của bạn để cung cấp câu trả lời đầy đủ cho câu hỏi gốc hơn là chỉ trả lời nhận xét của người nào đó. – Mike

0
/// <summary> 
/// Returns the day that is the specific day of week of the input day. 
/// </summary> 
/// <param name="input">The input day.</param> 
/// <param name="dayOfWeek">0 is Monday, 6 is Sunday.</param> 
/// <returns></returns> 
public static DateTime GetDayOfWeekOfSpecific(DateTime input, int dayOfWeek) 
{ 
    if(input.DayOfWeek == DayOfWeek.Sunday) 
    { 
     dayOfWeek -= 7; 
    } 
    // lastMonday is always the Monday before nextSunday. 
    // When today is a Sunday, lastMonday will be tomorrow.  
    int offset = input.DayOfWeek - DayOfWeek.Monday; 
    DateTime lastMonday = input.AddDays(-offset); 
    DateTime nextDayOfWeek = lastMonday.AddDays(dayOfWeek); 
    return nextDayOfWeek; 
} 
Các vấn đề liên quan