C# 根据C中输入的日期范围拉取一组周#

C# 根据C中输入的日期范围拉取一组周#,c#,asp.net,datetime,C#,Asp.net,Datetime,我最终为我们生产的软件的客户定制了很多基于web的报告,而且我对开发相对来说是新手,所以我遇到了一个有趣的问题,我不确定如何处理。我已经解决了具体问题,但我相信有更好的方法来处理这个问题,而且如果有人遇到这个问题,我希望能够在今天上午分享我的工作成果。我渴望成为社区中富有成效的一员,但也愿意接受有关我的问题/答案/方法等的任何反馈 生成报告,允许用户提供开始和结束日期,但在整个报告生成过程中,日期范围可能意味着多个方面。在报告的一个部分中,输入的日期范围在该范围内提取月份,这很容易从DateTi

我最终为我们生产的软件的客户定制了很多基于web的报告,而且我对开发相对来说是新手,所以我遇到了一个有趣的问题,我不确定如何处理。我已经解决了具体问题,但我相信有更好的方法来处理这个问题,而且如果有人遇到这个问题,我希望能够在今天上午分享我的工作成果。我渴望成为社区中富有成效的一员,但也愿意接受有关我的问题/答案/方法等的任何反馈


生成报告,允许用户提供开始和结束日期,但在整个报告生成过程中,日期范围可能意味着多个方面。在报告的一个部分中,输入的日期范围在该范围内提取月份,这很容易从DateTime字符串中提取出来,并将其分解为可管理的块。在其他区域中,范围被视为是这样的,并且拉取的数据在该范围内聚合。我遇到的挑战是报告中的一个部分,该部分的数据是基于周进行聚合的,因此报告的呈现方式显示了每周(1901年1月1日-1901年7月1日),并且相关数据列在选定日期范围内受影响的所有周中都会出现。

我所做的缓解问题的方法是采用给定的日期,然后使用内置的DateTimeFormat.FirstDayOfWeek计算出一周中“第一”天的日期,然后确定该周的结束日期,在该日期的基础上再加上六天,将日期作为开始和结束提交给数据表,然后再加上一天将日期推到下一周

此外,为了确保集合有一个结束日期,我将输入的结束日期与该周的计算结束日期进行比较,最后这些日期的减法将以负数或零结束,这表示输入的结束日期落在刚刚提交到DataTable的一周内。我相信有更好的方法可以做到这一点,但它仍然有效。我希望这至少能节省一个人20分钟的时间。谢谢

String sBeginDate = "";//Given in input
String sEndDate = "";//Given in input
DateTime weekStartDate;
DateTime weekEndDate;
DataTable dtWeeksInRange = new DataTable();                
DataColumn dcWeekStart = new DataColumn("WeekStart");
DataColumn dcWeekEnd = new DataColumn("WeekEnd");        
dtWeeksInRange.Columns.Add(dcWeekStart);
dtWeeksInRange.Columns.Add(dcWeekEnd);
DayOfWeek firstday = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;        
     weekStartDate = Convert.ToDateTime(sBeginDate) ;

    do
    {            

      while (weekStartDate.DayOfWeek != firstday) 
           { 
              weekStartDate = weekStartDate.AddDays(-1); 
           }
        weekEndDate = weekStartDate.AddDays(6);
        dtWeeksInRange.Rows.Add(weekStartDate, weekEndDate);
        weekStartDate = weekEndDate.AddDays(1);            
    }
      while ((Convert.ToDateTime(sEndDate).Subtract(weekEndDate)).Days > 0);

foreach (DataRow dr in dtWeeksInRange.Rows)
    {
      //Outputting the set of dates to the page
        Response.Write(Convert.ToDateTime(dr["WeekStart"]).ToShortDateString() + 
        " - " + 
        Convert.ToDateTime(dr["WeekEnd"]).ToShortDateString() + 
        "<br />");
    }
字符串sbeginade=“”//输入
字符串sEndDate=“”//输入
日期时间周开始日期;
DateTime weekEndDate;
DataTable dtWeeksInRange=新DataTable();
DataColumn dcWeekStart=新的DataColumn(“WeekStart”);
DataColumn dcWeekEnd=新的DataColumn(“周末”);
dtWeeksInRange.Columns.Add(dcWeekStart);
dtWeeksInRange.Columns.Add(dcWeekEnd);
DayOfWeek firstday=System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
weekStartDate=Convert.ToDateTime(sBeginDate);
做
{            
while(weekStartDate.DayOfWeek!=第一天)
{ 
weekStartDate=weekStartDate.AddDays(-1);
}
weekEndDate=weekStartDate.AddDays(6);
添加(weekStartDate,WeekenDate);
weekStartDate=weekEndDate.AddDays(1);
}
while((Convert.ToDateTime(sEndDate).Subtract(weekEndDate)).Days>0);
foreach(dtWeeksInRange.Rows中的数据行dr)
{
//将日期集输出到页面
Response.Write(Convert.ToDateTime(dr[“WeekStart”])。ToSortDateString()+
" - " + 
Convert.ToDateTime(dr[“WeekEnd”]).ToSortDateString()+
“
”; }
我所做的缓解问题的方法是采用给定的日期,然后使用内置的DateTimeFormat.FirstDayOfWeek计算出一周中“第一”天的日期,然后确定该周的结束日期,在该日期的基础上再加上六天,将日期作为开始和结束提交到数据表中,然后添加一个,将日期推到下一周

此外,为了确保集合有一个结束日期,我将输入的结束日期与该周的计算结束日期进行比较,最后这些日期的减法将以负数或零结束,这表示输入的结束日期落在刚刚提交到DataTable的一周内。我相信有更好的方法可以做到这一点,但它仍然有效。我希望这至少能节省一个人20分钟的时间。谢谢

String sBeginDate = "";//Given in input
String sEndDate = "";//Given in input
DateTime weekStartDate;
DateTime weekEndDate;
DataTable dtWeeksInRange = new DataTable();                
DataColumn dcWeekStart = new DataColumn("WeekStart");
DataColumn dcWeekEnd = new DataColumn("WeekEnd");        
dtWeeksInRange.Columns.Add(dcWeekStart);
dtWeeksInRange.Columns.Add(dcWeekEnd);
DayOfWeek firstday = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;        
     weekStartDate = Convert.ToDateTime(sBeginDate) ;

    do
    {            

      while (weekStartDate.DayOfWeek != firstday) 
           { 
              weekStartDate = weekStartDate.AddDays(-1); 
           }
        weekEndDate = weekStartDate.AddDays(6);
        dtWeeksInRange.Rows.Add(weekStartDate, weekEndDate);
        weekStartDate = weekEndDate.AddDays(1);            
    }
      while ((Convert.ToDateTime(sEndDate).Subtract(weekEndDate)).Days > 0);

foreach (DataRow dr in dtWeeksInRange.Rows)
    {
      //Outputting the set of dates to the page
        Response.Write(Convert.ToDateTime(dr["WeekStart"]).ToShortDateString() + 
        " - " + 
        Convert.ToDateTime(dr["WeekEnd"]).ToShortDateString() + 
        "<br />");
    }
字符串sbeginade=“”//输入
字符串sEndDate=“”//输入
日期时间周开始日期;
DateTime weekEndDate;
DataTable dtWeeksInRange=新DataTable();
DataColumn dcWeekStart=新的DataColumn(“WeekStart”);
DataColumn dcWeekEnd=新的DataColumn(“周末”);
dtWeeksInRange.Columns.Add(dcWeekStart);
dtWeeksInRange.Columns.Add(dcWeekEnd);
DayOfWeek firstday=System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
weekStartDate=Convert.ToDateTime(sBeginDate);
做
{            
while(weekStartDate.DayOfWeek!=第一天)
{ 
weekStartDate=weekStartDate.AddDays(-1);
}
weekEndDate=weekStartDate.AddDays(6);
添加(weekStartDate,WeekenDate);
weekStartDate=weekEndDate.AddDays(1);
}
while((Convert.ToDateTime(sEndDate).Subtract(weekEndDate)).Days>0);
foreach(dtWeeksInRange.Rows中的数据行dr)
{
//将日期集输出到页面
Response.Write(Convert.ToDateTime(dr[“WeekStart”])。ToSortDateString()+
" - " + 
Convert.ToDateTime(dr[“WeekEnd”]).ToSortDateString()+
“
”; }