You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 17:36:05