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

