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
相关产品推荐
相关产品推荐

