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

Flutter:移除时间格式前导零或转换为分钟/小时格式

当然可以用正则表达式来实现这两种需求!下面我会分别针对移除前导零和转换为分钟/小时格式这两个场景,结合你给出的示例要求,给出具体的正则方案+代码实现,确保完全贴合你的预期结果~

一、移除前导零的正则实现

先拆解下你要的规则:

  • 小时为00时,直接去掉小时段,再处理分钟的前导零(比如00:03:15→3:15,00:42:32→42:32)
  • 小时为0x时,去掉小时的前导零(比如04:00:00→4:00:00)
  • 小时非零且无前导零(比如10:10:10)保持不变
  • 全零时间00:00:00要转为0:00,00:00:xx转为0:xx

我们可以用正则配合少量逻辑判断来实现,代码示例(以JavaScript为例):

function removeLeadingZero(timeStr) {
  // 先处理小时的单个前导零(0x:xx:xx → x:xx:xx)
  let processed = timeStr.replace(/^0(?=\d:)/, '');
  
  // 处理小时为00的情况,拆分分钟和秒段
  processed = processed.replace(/^00:(0?)(\d+):(\d+)/, (_, leadingZero, minute, second) => {
    // 如果分钟是00,返回0:秒段
    if (minute === '0') {
      return `0:${second}`;
    }
    // 否则去掉分钟的前导零,返回分钟:秒
    return `${leadingZero ? minute : minute}:${second}`;
  });
  
  // 单独处理全零的特殊情况
  return processed.replace(/^00:00:00$/, '0:00');
}

测试你的示例:

  • removeLeadingZero('00:03:15') → 3:15
  • removeLeadingZero('10:10:10') → 10:10:10
  • removeLeadingZero('00:00:00') → 0:00
  • removeLeadingZero('04:00:00') → 4:00:00
  • removeLeadingZero('00:42:32') → 42:32
  • removeLeadingZero('00:00:18') → 0:18
  • removeLeadingZero('00:00:08') → 0:08
二、转换为分钟/小时格式的正则实现

你的转换规则示例:

  • 小时为00且秒为00:显示「分钟数 min」(00:07:00→7 min)
  • 小时为00且秒非00:显示「分钟:秒 min」(00:10:30→10:30 min)
  • 小时非零且秒为00:显示「小时数h 分钟数 min」(01:40:00→1h 40 min)

这里我们用正则捕获时间的时、分、秒三段,再根据数值判断生成结果,代码示例:

function convertToHourMin(timeStr) {
  // 用正则捕获HH:mm:ss的三个部分
  const timeMatch = timeStr.match(/^(\d{2}):(\d{2}):(\d{2})$/);
  if (!timeMatch) return timeStr; // 不符合格式的直接返回原字符串
  
  const [_, hourStr, minuteStr, secondStr] = timeMatch;
  const hour = parseInt(hourStr, 10);
  const second = parseInt(secondStr, 10);
  
  if (hour === 0) {
    if (second === 0) {
      return `${parseInt(minuteStr, 10)} min`;
    } else {
      return `${minuteStr}:${secondStr} min`;
    }
  } else {
    // 小时非零的情况,按示例返回「Xh Y min」
    return `${hour}h ${parseInt(minuteStr, 10)} min`;
  }
}

测试你的示例:

  • convertToHourMin('00:07:00') → 7 min
  • convertToHourMin('00:10:30') → 10:30 min
  • convertToHourMin('01:40:00') → 1h 40 min

如果需要支持更多边缘场景(比如01:05:30这种带秒的非零小时情况),只需要在else分支里补充逻辑即可,比如返回${hour}h ${minuteStr}:${secondStr} min。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:50:24