C#使用TimeSpan判断时间是否处于工作时段逻辑错误如何修复?
问题原因
- 核心判断逻辑写反
你当前的if判断条件是预约时间落在工作时段范围内时触发返回不可用,和需求完全相反:你需要拦截的是不在工作时段内的预约,而非在时段内的。按照现有代码,用户输入1:00 PM(在10:00 AM到7:30 PM之间)会被错误拦截,输入10:00 PM(不在范围内)反而会通过,完全不符合预期。 - 边界值处理缺失
当前使用了严格大于>和严格小于<,如果用户预约时间刚好是工作开始时间10:00 AM或者结束时间7:30 PM,会被排除在判断之外,需要根据业务需求调整边界判断符,常规业务场景下工作起始时间是允许预约的,结束时间如果是下班时点,可设置为不允许预约超过该时间的场次。
修复后的代码示例
startTime = TimeSpan.Parse(startTime24); // 工作时段起始时间 例:10:00对应TimeSpan(10,0,0) endTime = TimeSpan.Parse(endTime24); // 工作时段结束时间 例:19:30对应TimeSpan(19,30,0) TimeSpan appointmentTimeSpan = obj.AppointmentTimeFrom; // 用户提交的预约时间 // 判断逻辑:不在工作时段内时,返回不可用 if (appointmentTimeSpan < startTime || appointmentTimeSpan > endTime) { return Messages.WorkingSlotNotAvailable; } // 校验通过,执行后续逻辑
注意事项
- 请确保
startTime24、endTime24是24小时制的时间字符串,例如19:30而非07:30 PM,TimeSpan.Parse无法直接解析带AM/PM标识的12小时制时间,若数据库存储的是12小时制格式,需要先通过DateTime.ParseExact转换为DateTime类型后再取TimeOfDay属性获取TimeSpan值。 - 如果业务要求结束时间7:30 PM不允许预约(即最晚可预约到7:30 PM之前的时间),可将
appointmentTimeSpan > endTime调整为appointmentTimeSpan >= endTime。
内容的提问来源于stack exchange,提问作者Nic
相关产品推荐
相关产品推荐

