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

