2009-10-29 78 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