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

Flutter/Dart中如何将Duration格式化为时分秒标准文本格式?

Flutter/Dart Duration 转视频时长文本实现

要把Duration格式化为时:分:秒格式的视频时长文本,核心是分别提取时、分、秒的独立字段,对分钟、秒数做不足两位补前导零的处理,推荐用Dart扩展方法封装逻辑,复用性更高。

基础实现(固定输出 时:分:秒 格式)

extension VideoDurationFormat on Duration {
  String toHmsString() {
    // 提取整小时数
    final hours = inHours;
    // 提取扣除整小时后剩余的分钟数,不足两位补前导0
    final minutes = inMinutes.remainder(60).toString().padLeft(2, '0');
    // 提取扣除整分钟后剩余的秒数,不足两位补前导0
    final seconds = inSeconds.remainder(60).toString().padLeft(2, '0');

    return '$hours:$minutes:$seconds';
  }
}

调用示例

void main() {
  const testDuration = Duration(hours: 1, minutes: 12, seconds: 55);
  print(testDuration.toHmsString()); // 输出结果:1:12:55

  // 边界场景验证
  print(Duration(minutes: 2, seconds: 7).toHmsString()); // 输出:0:02:07
  print(Duration(hours: 3, seconds: 42).toHmsString()); // 输出:3:00:42
}

可选优化:不足1小时时隐藏小时位

如果不需要固定展示小时位,比如时长小于1小时时输出分:秒格式(如12:34而非0:12:34),可以调整扩展逻辑增加判断:

extension VideoDurationFormat on Duration {
  String toHmsString({bool forceShowHours = false}) {
    final hours = inHours;
    final minutes = inMinutes.remainder(60).toString().padLeft(2, '0');
    final seconds = inSeconds.remainder(60).toString().padLeft(2, '0');

    if (hours > 0 || forceShowHours) {
      final hourStr = hours.toString();
      return '$hourStr:$minutes:$seconds';
    }
    // 不足1小时时直接返回 分:秒 格式
    return '${inMinutes.remainder(60)}:$seconds';
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:27:34