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

Flutter如何将分:秒.毫秒格式的圈速字符串转换为可比较的时间类型

Flutter卡丁车圈速比较实现方案

你的需求是处理时长类型的圈速数据,使用Duration类比DateTime更适配,DateTime是为日期时间点设计的,本身不适合转纯时长数据,自然容易出现不符合预期的结果。

1. 实现圈速字符串转Duration的工具方法

/// 把格式为「分:秒.毫秒」的圈速字符串转为Duration对象
Duration parseLapTime(String lapTimeStr) {
  try {
    final parts = lapTimeStr.split(':');
    final minutes = int.parse(parts[0]);
    final secondParts = parts[1].split('.');
    final seconds = int.parse(secondParts[0]);
    final milliseconds = int.parse(secondParts[1]);
    return Duration(
      minutes: minutes,
      seconds: seconds,
      milliseconds: milliseconds,
    );
  } catch (e) {
    // 格式异常处理逻辑,可根据需求自定义返回值/抛异常
    rethrow;
  }
}

Duration原生支持大小比较运算符(</>/==)和排序,完全满足圈速对比需求。

2. 双圈速比较示例代码

对应你给出的逻辑,实现如下:

String? bestLap;
final lapA = parseLapTime('1:02.456');
final lapB = parseLapTime('1:03.589');

if (lapA < lapB) {
  bestLap = '1:02.456';
} else {
  bestLap = '1:03.589';
}

3. 批量找最快圈扩展用法

如果需要从多个圈速里选出最快圈,直接排序即可:

final allLapStrings = ['1:02.456', '0:59.123', '1:03.589', '1:00.892'];
// 关联转换后的Duration和原字符串
final lapMapEntries = allLapStrings.map((str) => MapEntry(parseLapTime(str), str)).toList();
// 按Duration从小到大排序,排在最前的就是最快圈
lapMapEntries.sort((a, b) => a.key.compareTo(b.key));
final fastestLapStr = lapMapEntries.first.value; // 结果为0:59.123

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:02