2010-11-09 68 views
6

我有一個例如日期「2010-11-09,Thuesday獲取週一和週日在C#中有一定的DateTime

現在我想要得到的週一和週日,其中謊言的日期時間上述日期。

你會怎麼做?

+0

@Lisa;你的意思是你想要星期二星期一和星期日的日期? – BeemerGuy 2010-11-09 22:30:36

+0

@Beemer:按照星期日開始的那個慣例,這是行不通的。 – 2010-11-09 22:33:12

+0

@Hank;是的,它會的。 OP可能想要檢索星期二開始的星期日。只要我們不知道他們想要什麼,任何邏輯都是可能的。通過海報「light」檢查下面的答案。 – BeemerGuy 2010-11-09 22:35:36

回答

36

這是probaly你追求的:

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); 

編輯:既然lastMonday並不總是顧名思義是什麼(見註釋),下面的一行可能是更重要的一點:

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

很好的解決方案,比我的清潔。 – light 2010-11-11 22:40:14

+3

這有兩個錯誤,Monday.AddDays上的拼寫錯誤應該是小寫的'm'。同樣星期一從星期一開始,你將增加6天而不是7天。增加七天給你下面的星期一。 – Banford 2011-03-29 10:00:37

+3

這有另一個錯誤。如果今天是星期天,它將在下週一(偏移量= -1)而不是上個星期一返回。如果星期日爲整數,則返回0,星期一將返回1,所以星期日 - 星期一= -1。 添加此行,將修復它: offset =(offset <0)? 6:偏移量; – gijswijs 2014-01-30 13:50:15

0

這樣的事情,當然你想從在DateTime.MaxValue之前的一些點回路斷線,但這應該做到:

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.Now.AddDays ((DateTime.Now.DayOfWeek - 1)* -1).Date;

DateTime Sunday = DateTime.Now.AddDays(7 -DateTime.Now.DayOfWeek).Date;

+1

我認爲這不適用於星期天。你難道不會得到明天和下個星期天不會受到今天(星期日)的限制嗎? (0-1)* - 1 = 1,7-0 = 7。 – 2012-12-20 18:00:54

0

這是很容易,如果你使用條件方法

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

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

} 
+0

請更新您的答案,以提供對原始問題的完整答案,而不僅僅是回覆某人的評論。 – Mike 2014-05-26 03:30:16

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; 
} 
相關問題