检查日期时间是否与其他日期时间在同一周

Lar*_*ard 10 c# datetime c#-4.0

假设我在表格中有一个日期列表.现在我想找到所有行,它们与作为参数提供的日期在同一周.

假设我有一张桌子:

  • 2014年9月11日
  • 2014年9月12日
  • 2014年9月15日

而且我给这个函数提供了参数2014-09-09,它必须从星期一 - >星期日看,并且意识到09-11和09-12是本周的一部分,但不是09-15.

怎么解决这个问题呢?

我曾考虑检查年,月和周数,但你无法保证月份是一样的......

那么你如何解决这样的问题呢?

Spa*_*row 13

DxCk的评论是有效的.即使一年的第一周或最后一周跨越两个不同的年份,此解决方案仍然有效:

检查两个日期的一周的第一天是否在同一天.这是代码:

    private bool DatesAreInTheSameWeek(DateTime date1, DateTime date2)
    {
        var cal = System.Globalization.DateTimeFormatInfo.CurrentInfo.Calendar;
        var d1 = date1.Date.AddDays(-1 * (int)cal.GetDayOfWeek(date1));
        var d2 = date2.Date.AddDays(-1 * (int)cal.GetDayOfWeek(date2));

        return d1 == d2;
    }
Run Code Online (Sandbox Code Playgroud)


kod*_*bot 7

为什么不?

bool AreFallingInSameWeek(DateTime date1, DateTime date2)
{
    return date1.AddDays(-(int)date1.DayOfWeek) == date2.AddDays(-(int)date2.DayOfWeek);
}
Run Code Online (Sandbox Code Playgroud)

如果您想使用星期日以外的任何一天作为一周的开始

bool AreFallingInSameWeek(DateTime date1, DateTime date2, DayOfWeek weekStartsOn)
{
    return date1.AddDays(-GetOffsetedDayofWeek(date1.DayOfWeek, (int)weekStartsOn)) == date2.AddDays(-GetOffsetedDayofWeek(date2.DayOfWeek, (int)weekStartsOn));
}

int GetOffsetedDayofWeek(DayOfWeek dayOfWeek, int offsetBy)
{
    return (((int)dayOfWeek - offsetBy + 7) % 7)
}
Run Code Online (Sandbox Code Playgroud)