鑑於月中的某一天,我怎麼能得到那一天,下週日?
所以如果我在2011年9月13日星期二通過,它將於9月18日返回。
鑑於月中的某一天,我怎麼能得到那一天,下週日?
所以如果我在2011年9月13日星期二通過,它將於9月18日返回。
我使用這個擴展方法:
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);
}
是不是使用一個枚舉的基礎值是危險的? –
+1使其成爲擴展方法 –
@Spencer K:這取決於,如果是星期幾,我會很驚訝它會在近(甚至遠)未來發生變化;-) –
/// <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/
var date = DateTime.Now;
var nextSunday = date.AddDays(7 - (int) date.DayOfWeek);
如果您需要最近的週日,代碼有點不同(如如果你在週日,週日最接近今天):
var nearestSunday = date.AddDays(7 - date.DayOfWeek == DayOfWeek.Sunday ? 7 : date.DayOfWeek);
這裏是代碼:
int dayOfWeek = (int) DateTime.Now.DayOfWeek;
DateTime nextSunday = DateTime.Now.AddDays(7 - dayOfWeek).Date;
在你的例子中,獲取星期幾的數值:星期二= 2
然後從星期天減去它,7 -2 = 5天加入到下一個星期天的日期。 :)
DateTime dt=dateTime;
do {
dt=dt.AddDays(1);
} while(dt.DayOfWeek!= DayOfWeek.Sunday);
// 'dt' is now the next Sunday
您的問題不清楚如果日期已經是星期日,是否返回相同的日期;我假設不,但如果我錯了,將上面的內容改爲while循環。
實施例使用遞歸
private static DateTime GetNextSunday(DateTime dt)
{
var tomorrow = dt.AddDays(1);
if (tomorrow.DayOfWeek != DayOfWeek.Sunday)
{
GetNextSunday(tomorrow);
}
return tomorrow;
}
照顧評論downvoter?我討厭當人們這樣做... –
我也會討厭這個!不過,我認爲這樣做效果不好。如前所述,DateTime實例是不可變的,您甚至不使用方法的返回值。還有一件事要提到:將這種功能放入擴展方法是非常好的,至少對我來說是這樣。 – Kjellski
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;
}
閱讀'DayOfWeek'屬性。算出星期天前的幾天。調用'AddDays'傳遞該號碼。 –
這是一個家庭作業嗎?如果是這樣,用'家庭作業'標籤標記問題 –
如果我只是有一個循環,並且增加一天並檢查它是否是所需的一天,會出現什麼問題?如果是的話,打破。 – codecompleting