获取知道周数的第一天和最后一天的日期

Oct*_*ure 7 c# date

我需要知道周数的第一天和最后一天的日期.

我得到一个开始日期和结束日期,代表给定年份中选定周的第一天和最后一天.然后我需要获取上一年同一周的开始日期和结束日期,以对某些数据进行图形比较.

我设法根据给定的开始日期和结束日期获得周数.现在我需要获取前一年同一周的第一天和最后一天的日期.我怎么能最快地做到这一点?

编辑:这是我得到周数的方式:

 private int GetWeekNumber(DateTime date)
    {
        GregorianCalendar calendar = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
        return calendar.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);            
    }
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 19

您可以使用以下两种方法根据给定年份计算给定周数的周数和开始日期:

// this method is borrowed from http://stackoverflow.com/a/11155102/284240
public static int GetIso8601WeekOfYear(DateTime time)
{
    DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time);
    if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
    {
        time = time.AddDays(3);
    }

    return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
} 

public static DateTime FirstDateOfWeek(int year, int weekOfYear, System.Globalization.CultureInfo ci)
{
    DateTime jan1 = new DateTime(year, 1, 1);
    int daysOffset = (int)ci.DateTimeFormat.FirstDayOfWeek - (int)jan1.DayOfWeek;
    DateTime firstWeekDay = jan1.AddDays(daysOffset);
    int firstWeek = ci.Calendar.GetWeekOfYear(jan1, ci.DateTimeFormat.CalendarWeekRule, ci.DateTimeFormat.FirstDayOfWeek);
    if ((firstWeek <= 1 || firstWeek >= 52) && daysOffset >= -3)
    {
        weekOfYear -= 1;
    }
    return firstWeekDay.AddDays(weekOfYear * 7);
}
Run Code Online (Sandbox Code Playgroud)

然后您可以通过以下方式获取两个日期:

// 46
int thisWeekNumber = GetIso8601WeekOfYear(DateTime.Today); 
// 11/11/2013  
DateTime firstDayOfWeek= FirstDateOfWeek(2013, thisWeekNumber, CultureInfo.CurrentCulture); 
// 11/12/2012  
DateTime firstDayOfLastYearWeek = FirstDateOfWeek(2012, thisWeekNumber, CultureInfo.CurrentCulture);   
Run Code Online (Sandbox Code Playgroud)

添加6天即可获得本周结束.

  • 这种方法在2006年的第一周失败.我已经测试了对2012-01的以下修正,直到2025-52范围.`if((firstWeek <= 1 || firstWeek> = 52)&& daysOffset> = -3)` (2认同)

小智 12

这是我的解决方案:

public static DateTime FirstDayOfWeek(DateTime date)
{
    DayOfWeek fdow = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
    int offset = fdow - date.DayOfWeek;
    DateTime fdowDate = date.AddDays(offset);
    return fdowDate;
}

public static DateTime LastDayOfWeek(DateTime date)
{
    DateTime ldowDate = FirstDayOfWeek(date).AddDays(6);
    return ldowDate;
}
Run Code Online (Sandbox Code Playgroud)

  • 到目前为止最好的答案 (2认同)
  • 如果“日期”是星期日,则 FirstDayOfWeek 给出下周的第一天。 (2认同)