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