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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:36:01