62,046
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 排课
/// </summary>
/// <param name="courseCount">报名课程数</param>
/// <param name="scheduleDays">排课日</param>
/// <param name="enrollDate">报名日期</param>
/// <returns></returns>
public static List<DateTime> GetSchedule(int courseCount, List<DayOfWeek> scheduleDays, DateTime? enrollDate = null)
{
if (enrollDate == null)
{
enrollDate = DateTime.Now;
}
//报名课程数和排课日得到需要上几周的课
var weeks = (courseCount / scheduleDays.Count) + (courseCount % scheduleDays.Count > 0 ? 1 : 0);
//得到天数
var days = weeks * 7;
List<DateTime> listDay = new List<DateTime>();
DateTime dtDay = new DateTime();
var endDay = enrollDate.Value.AddDays(days);
//报名日期和课程结束周的日期得到日期区间
for (dtDay = enrollDate.Value; dtDay.CompareTo(endDay) <= 0; dtDay = dtDay.AddDays(1))
{
listDay.Add(dtDay);
}
//返回日期区间里包含排课日的日期之后取得报名课程数的日期
return listDay.Where(d => scheduleDays.Contains(d.DayOfWeek)).Take(courseCount).ToList();
}
var schedule = GetSchedule(10, new List<DayOfWeek>() { DayOfWeek.Tuesday, DayOfWeek.Thursday, DayOfWeek.Friday }, DateTime.Now.AddDays(-1));
static IList<DateTime> GetDates(DateTime startDate, int count, IList<DayOfWeek> supportDays)
{
IList<DateTime> list = new List<DateTime>();
for (var i = 0; ; i++)
{
var tmpDate = startDate.AddDays(i);
if (supportDays.Contains(tmpDate.DayOfWeek))
{
list.Add(tmpDate);
}
if (list.Count >= count)
{
break;
}
}
return list;
}
foreach (var date in GetDates(DateTime.Now.Date, 10, new List<DayOfWeek> { DayOfWeek.Saturday, DayOfWeek.Thursday, DayOfWeek.Wednesday }))
{
Console.WriteLine(date.ToString("yyyy-MM-dd"));
}