2009-10-29 58 views

回答

4

只需創建12月31日的DateTime對象。如果不是週六,那麼1月1日必須在同一周內。

DayOfWeek day = new DateTime(someYear, 12, 31).DayOfWeek; 
if(day < DayOfWeek.Saturday) 
    // January 1st must be within the same week 

編輯:正如Groo指出的那樣,本週的開始可能並不總是星期日。如果不是,那麼您可以使其成爲< = DayOfWeek.Saturday,或使用System.Globalization.CultureInfo.DateTimeFormat.FirstDayOfWeek + 7查找一週中的最後一天。

+0

我想也許他的意思是同一周的數字。否則它會過於簡單(:)儘管如此簡單) – 2009-10-29 14:30:12

+1

+1簡單 – JustLoren 2009-10-29 14:30:13

+0

如果你的星期從星期一開始,你可能想用'if(day <= DayOfWeek.Saturday)'。 – Groo 2009-10-29 14:36:58

5
var lastDay = new DateTime(2009, 12, 31); 
var firstDay = new DateTime(2010, 1, 1); 

bool isSameWeek = (int)lastDay.DayOfWeek < (int)firstDay.DayOfWeek; 

編輯:你沒問,但我認爲這是更有趣的計算,如果兩個日期落在同一個星期內。這也適用於你的問題,但它也從更一般的意義上解決了這個問題。它通過計算每個日期的開始時間來計算,然後比較日期時間值的日期部分是否相同(以防萬一不同時間傳入每個日期)。

/// <summary> 
/// Determines whether two dates fall in the same week span. 
/// </summary> 
/// <param name="left">The left DateTime to compare.</param> 
/// <param name="right">The right DateTime to compare.</param> 
/// <returns> 
/// </returns> 
public bool IsSameWeek(DateTime left, DateTime right) { 
    return AreDatePartsEqual(GetStartOfWeek(left), GetStartOfWeek(right)); 
} 

/// <summary> 
/// Gets the start of week. 
/// </summary> 
/// <param name="date">The date.</param> 
/// <returns></returns> 
public DateTime GetStartOfWeek(DateTime date) { 
    return date.AddDays(-1 * (int)date.DayOfWeek); 
} 

/// <summary> 
/// Compares two DateTimes using only the Date Part for equality 
/// </summary> 
/// <param name="left">The left DateTime to compare.</param> 
/// <param name="right">The right DateTime to compare.</param> 
/// <returns></returns> 
public bool AreDatePartsEqual(DateTime left, DateTime right) { 
    return 
     left.Day == right.Day && 
     left.Month == right.Month && 
     left.Year == right.Year; 
} 
7

這很容易。如果最後一天不是星期天,那麼明年的第一天必須在同一周!

當然,這取決於當你開始一週。

+2

使用領域知識解決問題?給予好評! – 2009-10-29 14:30:14

+0

如果最後一天是星期六怎麼辦?這不是說明年(星期日)的第一天不在同一周嗎? (假設星期日是一週的第一天) – 2009-10-29 15:09:12

相關問題