2011-09-30 118 views
37

可能重複:
ASP.net get the next tuesday如何獲取下個星期日的日期?

鑑於月中的某一天,我怎麼能得到那一天,下週日?

所以如果我在2011年9月13日星期二通過,它將於9月18日返回。

+5

閱讀'DayOfWeek'屬性。算出星期天前的幾天。調用'AddDays'傳遞該號碼。 –

+0

這是一個家庭作業嗎?如果是這樣,用'家庭作業'標籤標記問題 –

+1

如果我只是有一個循環,並且增加一天並檢查它是否是所需的一天,會出現什麼問題?如果是的話,打破。 – codecompleting

回答

74

我使用這個擴展方法:

public static DateTime Next(this DateTime from, DayOfWeek dayOfWeek) 
    { 
     int start = (int)from.DayOfWeek; 
     int target = (int)dayOfWeek; 
     if (target <= start) 
      target += 7; 
     return from.AddDays(target - start); 
    } 
+0

是不是使用一個枚舉的基礎值是危險的? –

+3

+1使其成爲擴展方法 –

+5

@Spencer K:這取決於,如果是星期幾,我會很驚訝它會在近(甚至遠)未來發生變化;-) –

3
/// <summary> 
/// Finds the next date whose day of the week equals the specified day of the week. 
/// </summary> 
/// <param name="startDate"> 
/// The date to begin the search. 
/// </param> 
/// <param name="desiredDay"> 
/// The desired day of the week whose date will be returneed. 
/// </param> 
/// <returns> 
/// The returned date is on the given day of this week. 
/// If the given day is before given date, the date for the 
/// following week's desired day is returned. 
/// </returns> 
public static DateTime GetNextDateForDay(DateTime startDate, DayOfWeek desiredDay) 
{ 
    // (There has to be a better way to do this, perhaps mathematically.) 
    // Traverse this week 
    DateTime nextDate = startDate; 
    while(nextDate.DayOfWeek != desiredDay) 
     nextDate = nextDate.AddDays(1D); 

    return nextDate; 
} 

來源:

http://angstrey.com/index.php/2009/04/25/finding-the-next-date-for-day-of-week/

23

date.AddDays(7 - (int)date.DayOfWeek)應該這樣做,我認爲。

date.DayOfWeek將返回一個表示日期的枚舉值(其中0表示星期日)。

+0

我對它做了一個小改動,對我來說工作得很好。 DateTime.Today.AddDays(7 - (int)DayOfWeek.Saturday).ToShortDateString() – dvdmn

+7

小心dvdnhm,只增加1天到今天的日期。 – Joey

+0

感謝關心,它爲我的目的,並在項目中使用它工作得很好.. – dvdmn

5
 var date = DateTime.Now; 
     var nextSunday = date.AddDays(7 - (int) date.DayOfWeek);  

如果您需要最近的週日,代碼有點不同(如如果你在週日,週日最接近今天):

var nearestSunday = date.AddDays(7 - date.DayOfWeek == DayOfWeek.Sunday ? 7 : date.DayOfWeek); 
2

這裏是代碼:

int dayOfWeek = (int) DateTime.Now.DayOfWeek; 
DateTime nextSunday = DateTime.Now.AddDays(7 - dayOfWeek).Date; 

在你的例子中,獲取星期幾的數值:星期二= 2

然後從星期天減去它,7 -2 = 5天加入到下一個星期天的日期。 :)

0
DateTime dt=dateTime; 
do { 
    dt=dt.AddDays(1); 
} while(dt.DayOfWeek!= DayOfWeek.Sunday); 
// 'dt' is now the next Sunday 

您的問題不清楚如果日期已經是星期日,是否返回相同的日期;我假設不,但如果我錯了,將上面的內容改爲while循環。

0

實施例使用遞歸

private static DateTime GetNextSunday(DateTime dt) 
    { 
     var tomorrow = dt.AddDays(1); 
     if (tomorrow.DayOfWeek != DayOfWeek.Sunday) 
     { 
      GetNextSunday(tomorrow); 
     } 

     return tomorrow; 
    } 
+2

照顧評論downvoter?我討厭當人們這樣做... –

+0

我也會討厭這個!不過,我認爲這樣做效果不好。如前所述,DateTime實例是不可變的,您甚至不使用方法的返回值。還有一件事要提到:將這種功能放入擴展方法是非常好的,至少對我來說是這樣。 – Kjellski

0
public static DateTime GetNextSunday (DateTime date) 
{ 
    if (date.DayOfWeek == DayOfWeek.Sunday) 
      date = date.AddDays(1); 
    while (date.DayOfWeek != DayOfWeek.Sunday) 
      date = date.AddDays(1); 

    return date; 
} 
+0

無論當前日期如何,您都要添加1天... – Joey

+0

如果當前是星期天(我假設如果是星期日,OP要下一個星期日),那麼我會添加1天,然後繼續添加天數直到它星期日。然後返回那一天。除非我錯過了一些東西。 – MattW

相關問題