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

Flutter中Duration超24小时转时分格式显示错误如何处理?

问题根源

DateTime 和 DateFormat 都是为处理具体时间点设计的,天然遵循24小时制、天数自动进位的规则,不适合用来展示累计时长类的数值,所以会出现大于24小时的部分被折算为日期、小时数取模24的问题。

解决方案

你已经得到了存储总时长的 Duration 对象,直接从该对象提取总小时数、剩余分钟数后自行格式化即可,不需要转成 DateTime 类型:

// 你的原始Duration对象
var c = Duration(seconds: totalServiceSeconds);

// 提取总小时数(不会模24,25小时直接返回25)
int totalHours = c.inHours;
// 提取扣除整小时后剩余的分钟数
int remainingMinutes = c.inMinutes.remainder(60);

// 格式化补零,得到最终展示字符串
String displayTime = '${totalHours.toString().padLeft(2, '0')}:${remainingMinutes.toString().padLeft(2, '0')}';

// 直接放到Text组件里使用即可
Text(displayTime)

如果需要多次使用可以封装为工具函数:

String formatDurationToHoursMinutes(Duration duration) {
  String padTwoDigits(int num) => num.toString().padLeft(2, '0');
  String hours = padTwoDigits(duration.inHours);
  String minutes = padTwoDigits(duration.inMinutes.remainder(60));
  return '$hours:$minutes';
}

// 调用示例
String displayTime = formatDurationToHoursMinutes(c);

效果验证

  • 总时长25小时5分:输出 25:05
  • 总时长24小时0分:输出 24:00
  • 总时长26小时12分:输出 26:12
  • 总时长3小时7分:输出 03:07

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:15:03