我为缓解这个问题所做的是获取给定的日期,然后使用内置的 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 />");
}