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

Dart:循环生成15分钟间隔时间槽及FormatException报错排查

问题解决与代码实现

错误原因

DateTime.parse('08:00')会抛出格式异常,因为DateTime.parse要求输入符合完整的RFC 3339日期时间格式(如2024-05-20 08:00),单独的HH:mm格式无法被直接解析。

修正后的完整代码

import 'package:intl/intl.dart';

String getTimeRange(int index, DateTime startTime) {
  const interval = Duration(minutes: 15);
  var start = startTime.add(interval * index);
  var end = start.add(interval);
  var formatTime = DateFormat('HH:mm').format;
  return '${formatTime(start)}-${formatTime(end)}';
}

void main() {
  // 指定开始时间,基于当前日期构造完整DateTime对象
  final startTime = DateFormat('HH:mm').parse('08:00');
  // 生成96个时间槽(覆盖24小时内所有15分钟间隔)
  final slots = [
    for (var i = 0; i < 96; i++)
      <String, dynamic>{
        'id': i + 1,
        'time': getTimeRange(i, startTime),
        'slotNumber': '${i + 1}'.padLeft(2, '0'),
        'clicked': false,
      },
  ];

  slots.forEach(print);
}

关键修正说明

  1. 正确解析起始时间:用DateFormat('HH:mm').parse('08:00')替代DateTime.parse('08:00'),DateFormat能正确识别单独的时分格式,并返回基于当前日期的完整DateTime对象。
  2. 灵活传入起始时间:将起始时间作为参数传入getTimeRange函数,支持任意指定起始时刻。
  3. 覆盖完整24小时:循环次数设为96,正好对应24小时内的所有15分钟间隔时段。
  4. 时间范围计算逻辑:通过累加15分钟间隔得到每个时段的起始时间,再加15分钟得到结束时间,最后统一格式化为HH:mm字符串拼接成时间范围。

输出示例(前4条)

{id: 1, time: 08:00-08:15, slotNumber: 01, clicked: false}
{id: 2, time: 08:15-08:30, slotNumber: 02, clicked: false}
{id: 3, time: 08:30-08:45, slotNumber: 03, clicked: false}
{id: 4, time: 08:45-09:00, slotNumber: 04, clicked: false}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:55:11