使用WorkingDayHelper计算工作日时节假日过滤失效问题排查
你遇到的现象是因为两个使用层面的问题导致的:
- 节假日匹配失败:你定义的节假日列表中的
DateTime实例时间部分默认是00:00:00,而传入GetNext方法的DateTime.Now带有当前实时时间,二者直接做相等判断时无法匹配,所以代码没有识别到9月15日属于节假日,误认为当天是普通工作日,因此直接返回了当天日期。 - 方法调用不符合需求:你调用的无参
GetNext方法默认仅返回下1个工作日,要实现加2个工作日的需求,需要调用带偏移量参数的重载。
解决方法
- 传入计算的日期时先调用
Date属性剔除时间部分,保证和节假日列表的日期格式匹配,同时指定偏移量参数:
var listHolidays = new List<DateTime> { new DateTime(2021,09,15), new DateTime(2021,09,16), }; var helper = new WorkingDayHelper(listHolidays); // 仅取日期部分,剔除时间干扰 var inputDate = DateTime.Now.Date; // 传入偏移量2,指定增加2个工作日 var newDate = helper.GetNext(inputDate, 2);
- 如果修改后依然存在匹配问题,可检查
WorkingDayHelper类中IsHoliday方法的实现,将日期比较逻辑改为仅匹配日期部分即可:
public bool IsHoliday(DateTime date) { // 只比较日期部分,忽略时间 return _holidays.Any(h => h.Date == date.Date); }
内容的提问来源于stack exchange,提问作者Raphael
相关产品推荐
相关产品推荐

