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

Flutter Dart中计算两个时间的平均时间实现方案

计算两个时间的平均值实现方案

核心思路

把两个时间转换成当天的总分钟数,求和后取平均值,再将结果转换回小时和分钟格式,最后封装成DateTime对象方便后续使用或展示。

步骤实现

  1. 维护两个时间变量
    你目前只有_dateTimeStart,需要再添加一个存储结束时间的变量:

    DateTime _dateTimeEnd = DateTime.now();
    TextEditingController endTime = TextEditingController();
    

    同时对应添加第二个TimePickerSpinner组件(逻辑和你现有的开始时间选择器一致,只需把变量换成_dateTimeEnd和endTime)。

  2. 编写平均值计算函数
    新增一个方法处理时间计算:

    DateTime calculateAverageTime(DateTime start, DateTime end) {
      // 将时间转为当天的总分钟数
      int startTotalMins = start.hour * 60 + start.minute;
      int endTotalMins = end.hour * 60 + end.minute;
      
      // 计算平均总分钟数(使用整数除法避免小数)
      int avgTotalMins = (startTotalMins + endTotalMins) ~/ 2;
      
      // 转换回小时和分钟
      int avgHour = avgTotalMins ~/ 60;
      int avgMinute = avgTotalMins % 60;
      
      // 返回当天的平均时间(日期部分不影响,仅保留时分)
      return DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, avgHour, avgMinute);
    }
    
  3. 调用函数并展示结果
    比如在按钮点击事件中触发计算:

    ElevatedButton(
      onPressed: () {
        setState(() {
          DateTime avgTime = calculateAverageTime(_dateTimeStart, _dateTimeEnd);
          // 格式化显示为24小时制的"HH:mm"格式
          String avgTimeStr = "${avgTime.hour.toString().padLeft(2, '0')}:${avgTime.minute.toString().padLeft(2, '0')}";
          // 可以把结果赋值给某个TextEditingController或者直接用于展示
          // averageTime.text = avgTimeStr;
        });
      },
      child: Text('计算平均时间'),
    )
    

注意事项

  • 你当前的TimePickerSpinner设置了is24HourMode: false,但需求是24小时制,建议修改为is24HourMode: true,避免12小时制带来的时间转换错误。
  • 如果需要处理跨天的情况(比如开始时间23:00,结束时间1:00),需要额外判断并调整计算逻辑,但你的需求示例是同一天内的时间,上述代码足够覆盖。

内容的提问来源于stack exchange,提问作者Himani Upadhyay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:25:26