如何将Dart Duration计数器格式化为YY MM DD HH的显示样式
Dart Duration格式转换为YY MM DD HH实现方案
需求说明
现有计数器可正常按DD HH mm ss格式输出,需调整为YY MM DD HH的显示格式。
现有可用代码
调用逻辑
var _lastConso = lastConsoString != null ? DateTime.parse(lastConsoString) : DateTime.now(); var duration_conso = DateTime.now().difference(_lastConso); final newDuration = _formatDuration_conso(duration_conso); String _finalDuration_conso = newDuration; // _finalDuration_conso为最终显示的计数器字符串
原格式化方法(输出DD HH mm ss)
String _formatDuration_conso(Duration duration) { String twoDigits(int n) { if (n >= 10) return "$n"; return "0$n"; } String twoDigitHours = twoDigits(duration.inHours.remainder(24)); String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60)); String twoDigitSeconds = twoDigits(duration.inSeconds.remainder(60)); return "${twoDigits(duration.inDays)} $twoDigitHours $twoDigitMinutes $twoDigitSeconds"; }
适配YY MM DD HH格式的实现方案
直接替换原有_formatDuration_conso方法即可,该实现按1年365天、1月30天的固定比例换算,满足常规计数场景需求:
String _formatDuration_conso(Duration duration) { // 定义换算常量 const int hoursPerDay = Duration.hoursPerDay; const int hoursPerYear = hoursPerDay * 365; const int hoursPerMonth = hoursPerDay * 30; // 按年、月、日、时的顺序依次计算取值,扣除已计算的部分得到剩余小时数 final int years = duration.inHours ~/ hoursPerYear; int remainder = duration.inHours % hoursPerYear; final int months = remainder ~/ hoursPerMonth; remainder %= hoursPerMonth; final int days = remainder ~/ hoursPerDay; remainder %= hoursPerDay; final int hours = remainder; // 统一补两位前缀0,拼接输出 return [years, months, days, hours] .map((v) => "$v".padLeft(2, "0")) .join(" "); }
内容的提问来源于stack exchange,提问作者Nitneuq
相关产品推荐
相关产品推荐

