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

如何将“1hr 26min”格式时长转换为纯小时数或拆分时分单位

问题原因

你之前的代码无法生效,核心原因是1hr 26min属于时间跨度(时长)字符串,不是标准的时刻/日期字符串:

  • DateTime.parse仅能解析符合规范的具体时刻值(比如2024-05-20 13:26这类),无法识别带hr/min单位的时长文本
  • DateFormat.Hm()是用来格式化时刻的「时:分」展示格式,本身就不是为时长处理设计的,用在这里完全不匹配场景。
实现方案

直接用正则表达式匹配字符串里的小时、分钟数字即可,兼容格式不完整的边界情况(比如仅含小时2hr、仅含分钟35min的场景也能正常解析)。

1. 单独拆分提取小时、分钟数值

/// 解析形如"Xhr Ymin"的时长字符串,返回拆分后的小时、分钟整数值
Map<String, int> splitDuration(String durationText) {
  // 正则匹配对应单位前的数字
  final hourReg = RegExp(r'(\d+)hr');
  final minReg = RegExp(r'(\d+)min');

  final hourValue = int.tryParse(hourReg.firstMatch(durationText)?.group(1) ?? '0') ?? 0;
  final minValue = int.tryParse(minReg.firstMatch(durationText)?.group(1) ?? '0') ?? 0;

  return {'hours': hourValue, 'minutes': minValue};
}

// 调用示例
final durationMap = splitDuration(FetchList[index].Duration);
int hours = durationMap['hours']!; // 拿到单独的小时值,1hr 26min场景下返回1
int minutes = durationMap['minutes']!; // 拿到单独的分钟值,1hr 26min场景下返回26

2. 格式化为纯小时数值

基于拆分后的结果,把分钟部分换算为小时单位相加即可,得到带小数的总小时数:

/// 把时长字符串转换为总小时数值
double parseToTotalHours(String durationText) {
  final durationMap = splitDuration(durationText);
  return durationMap['hours']! + durationMap['minutes']! / 60;
}

// 调用示例
double totalHours = parseToTotalHours(FetchList[index].Duration);
// 1hr 26min场景下返回值约为1.43,可根据需要保留小数位数

注意:如果你的时长字符串可能出现带空格、单位单复数(比如1hrs/26mins)的变体,只要把正则调整为RegExp(r'(\d+)hrs?')、RegExp(r'(\d+)mins?')即可兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:06:20