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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:30:53