1

我最终为我们生产的软件的客户定制了许多基于 Web 的报告,而且我对开发还比较陌生,所以我遇到了一个不知道如何处理的有趣问题。我已经制定了具体细节,但我确信有更好的方法来处理这个问题,如果有人遇到这个问题,我希望能够分享我今天早上的工作结果。我渴望成为社区中富有成效的成员,但也愿意接受有关我的问题/答案/方法等的任何反馈。

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

4

1 回答 1

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 />");
    }
于 2012-12-03T22:00:31.537 回答