如何从给定输入集计算EndDate?直播课周排期日期时间问题
周期性周度排期的课程EndDate计算问题
业务场景说明
问题来源于直播流媒体应用的周度固定课程排期功能:教师可从指定起始日开始,安排按周循环的固定上课日程。
以具体排期参数示例说明:
- 排期起始日:2021年4月18日
- 每周上课总天数:3天
- 固定上课日:周一、周二、周三
- 各上课日可单独设置课程时长,示例统一以单日课程总时长(TDPD)3小时30分钟计算(为当日从课程开始时间起算的课程长度)
- 示例对应的单周总课程时长:10小时30分钟(周一、周二、周三的单日时长累加值)
- 系统可允许的最大累计课程总时长:50小时
业务计算规则:按排期顺序逐天累加单日课程时长,直到累计总时长接近50小时的上限,计算累计时长刚好达标的对应日期,即为目标EndDate。
现有实现方案
目前已尝试通过先计算完整周数累计值的方式推进,核心逻辑如下:
int totalWeeks = 0; int totalHoursPerWeek = 3; int totalHoursAdded = 0; int maxHours = 50; for(int i = totalHoursPerWeek; i <= maxHours; i += totalHoursPerWeek) { totalHoursAdded += i; totalWeeks++; }
循环执行完成后,可得到累计对应的完整周数,后续衔接的日期推算逻辑如下:
DateTime endDate; if(totalHoursAdded == maxHours) { // 累计总时长刚好达到上限,无剩余待计算时长 endDate = currentDate.AddDays(totalWeeks * 7); } else { // 存在未达到上限的剩余待累计时长 int pendingHours = maxHours - totalHoursAdded; // 卡点:如何将剩余时长匹配到周度固定上课日序列,推算对应的结束日期 }
当前遇到的卡点
当累计完完整周次的总时长后,剩余未达50小时上限的待累计时长,没有明确的匹配规则:无法将零散的剩余时长对应到周循环的固定上课日中,也就无法推算出最终的目标EndDate,目前进度卡在此环节。
内容的提问来源于stack exchange,提问作者Thameem
相关产品推荐
相关产品推荐

