Flutter中如何将秒/毫秒时长转为00:00:00格式?
Flutter 实现时长转 HH:MM:SS 格式
1. 处理带小数的总秒数(如65秒 → 00:01:05)
如果输入是总秒数,可以通过拆分小时、分钟、剩余秒数,再补零格式化实现转换:
示例代码:
String formatSecondsToTime(double totalSeconds) { int hours = (totalSeconds ~/ 3600).toInt(); int minutes = ((totalSeconds % 3600) ~/ 60).toInt(); int seconds = (totalSeconds % 60).toInt(); return '${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}'; } // 使用示例 void main() { print(formatSecondsToTime(65)); // 输出 00:01:05 print(formatSecondsToTime(3661)); // 输出 01:01:01 }
如果需要保留秒的小数位(比如1.05秒 → 00:00:01.05),可以修改代码保留精度:
String formatSecondsToTimeWithMs(double totalSeconds) { int hours = (totalSeconds ~/ 3600).toInt(); int minutes = ((totalSeconds % 3600) ~/ 60).toInt(); double seconds = totalSeconds % 60; return '${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}:${seconds.toStringAsFixed(2).padLeft(5, '0')}'; } // 使用示例 void main() { print(formatSecondsToTimeWithMs(1.05)); // 输出 00:00:01.05 }
2. 处理毫秒级时长(如65000毫秒 → 00:01:05)
输入为总毫秒数时,先转成总秒数,再复用上述逻辑即可:
示例代码:
String formatMillisecondsToTime(int totalMilliseconds) { double totalSeconds = totalMilliseconds / 1000; int hours = (totalSeconds ~/ 3600).toInt(); int minutes = ((totalSeconds % 3600) ~/ 60).toInt(); int seconds = (totalSeconds % 60).toInt(); return '${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}'; } // 使用示例 void main() { print(formatMillisecondsToTime(65000)); // 输出 00:01:05 print(formatMillisecondsToTime(3661000)); // 输出 01:01:01 }
如果需要保留毫秒显示(如1050毫秒 → 00:00:01.050),可以直接拆分毫秒部分:
String formatMillisecondsToTimeWithMs(int totalMilliseconds) { int hours = (totalMilliseconds ~/ 3600000).toInt(); int remainingMsAfterHours = totalMilliseconds % 3600000; int minutes = (remainingMsAfterHours ~/ 60000).toInt(); int remainingMsAfterMinutes = remainingMsAfterHours % 60000; int seconds = (remainingMsAfterMinutes ~/ 1000).toInt(); int milliseconds = remainingMsAfterMinutes % 1000; return '${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}.${milliseconds.toString().padLeft(3, '0')}'; } // 使用示例 void main() { print(formatMillisecondsToTimeWithMs(1050)); // 输出 00:00:01.050 }
关键说明
- 用
padLeft(2, '0')确保每个时间段都是两位数字,不足补零 - 整数除法
~/和取余%运算可避免浮点数精度问题 - 支持超过24小时的时长,会直接显示如
25:30:15的格式
内容的提问来源于stack exchange,提问作者viki
相关产品推荐
相关产品推荐

