C# 基于5.0/5.5/6.0工作日规则的日历选择天数自动计算问题求解
5.5工作日规则天数计算bug修复
原有代码问题清单
- 值类型操作无效:
DateTime是值类型,startDate.AddDays(1);未将返回值赋值回原变量,该操作不会修改startDate的实际值。 - 循环变量使用错误:遍历日期的迭代变量为
date,但判断星期时错误使用了startDate,且循环体内额外对startDate执行自增,导致日期遍历逻辑完全混乱。 - 5.5规则逻辑未正确实现:仅周日全天休息、周六算0.5个工作日的规则没有落地,原有代码未统计区间内的周六数量,循环结束后
startDate已经超出选中日期区间,后续的0.5天扣减判断完全无意义。
修复后核心代码
private void SelectionChanged(SelectionChangedEventArgs obj) { if(Settings.WorkingDay == "5.0") { // 原有正常逻辑保留 } else if(Settings.WorkingDay == "5.5") { DateTime startDate = SelectedRange.StartDate.Date; DateTime endDate = SelectedRange.EndDate.Date; decimal workDays = 0; // 遍历区间内每一天 for (DateTime date = startDate; date <= endDate; date = date.AddDays(1)) { if (date.DayOfWeek == DayOfWeek.Sunday) { // 周日全天休息,不计入 continue; } else if (date.DayOfWeek == DayOfWeek.Saturday) { // 周六算半天 workDays += 0.5m; } else { // 周一到周五算全天 workDays += 1; } } Quantity = workDays; Debug.WriteLine(Quantity.ToString()); } else if(Settings.WorkingDay == "6.0") { // 原有正常逻辑保留 } }
内容的提问来源于stack exchange,提问作者MuthuKumar K
相关产品推荐
相关产品推荐

