Flutter中按30分钟分割时间段时出现多余半小时问题如何解决?
问题根因
- 总间隔数计算错误:以
09:00-17:00为例,总时长为8小时,按30分钟拆分的话最终要包含首尾两个时间点,共17个有效项,你原代码中hoursLeft = endTime - startTime +1多算了1小时,乘以2后得到18个生成项,自然会多出17:30这个错误项。 - 时间生成逻辑存在笔误:原代码中
endTime(i/2).truncate()属于语法错误,实际应为(endTime - (i/2).truncate()),否则代码无法正常运行。
修复方案
倒序生成再反转的逻辑可读性较差,容易出现边界判断错误,推荐直接从开始时间正序生成,逻辑清晰不容易出错,修复后的代码如下:
final response = await apiResponseMaker(result, ModelType.working_hour); if (response['success']) { List<WorkingHourModel> workingHours = response['hours']; List<String> hours = []; int startHour = int.parse(workingHours[0].startTime.split(':')[0]); int endHour = int.parse(workingHours[0].endTime.split(':')[0]); int currentHour = startHour; int currentMinute = 0; // 循环到结束时间整点为止,不超过边界 while (currentHour < endHour || (currentHour == endHour && currentMinute == 0)) { hours.add('$currentHour:${currentMinute == 0 ? '00' : '30'}'); if (currentMinute == 0) { currentMinute = 30; } else { currentMinute = 0; currentHour++; } } return { 'success': true, 'hours': hours, }; } return response;
修复后生成的时间列表为[9:00, 9:30, 10:00, 10:30, 11:00, 11:30, 12:00, 12:30, 13:00, 13:30, 14:00, 14:30, 15:00, 15:30, 16:00, 16:30, 17:00],符合预期。
内容的提问来源于stack exchange,提问作者Mohammed Niyaz
相关产品推荐
相关产品推荐

