首页 > 解决方案 > Dart - 将毫秒转换为字符串

问题描述

我正在使用 Dart(使用 Flutter),我需要将以毫秒为单位的时间转换为字符串。

转换时我想显示:

必须始终显示厘秒和秒,而只有大于 0 的分钟和小时才会显示。

预期输出示例:

time = 0           => "0.00"
time = 123         => "0.12"
time = 9012        => "9.01"
time = 19023       => "19.02"
time = 123123      => "2:03.12"
time = 5 * 3600000 => "5:00:00.00"

最左边的非零值可以是一位或多位,而其他必须是两位。

这是我的代码:

String convertTime(int time) {
  int centiseconds = (time % 1000) ~/ 10;
  time ~/= 1000;
  int seconds = time % 60;
  time ~/= 60;
  int minutes = time % 60;
  time ~/= 60;
  int hours = time;
  if (hours > 0) {
    return "$hours:${_twoDigits(minutes)}:${_twoDigits(seconds)}.${_twoDigits(centiseconds)}";
  } else if (minutes > 0) {
    return "$minutes:${_twoDigits(seconds)}.${_twoDigits(centiseconds)}";
  } else {
    return "$seconds.${_twoDigits(centiseconds)}";
  }
}

String _twoDigits(int time) {
  return "${time<10?'0':''}$time";
}

如何改进我的代码?执行此转换的最有效方法是什么?

标签: flutterdartmilliseconds

解决方案


根据这个答案,您可以实现这样的方法:

String printDuration(Duration duration) {
  String twoDigits(int n) {
    if (n >= 10) return "$n";
    return "0$n";
  }

  String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60));
  String twoDigitSeconds = twoDigits(duration.inSeconds.remainder(60));
  if (duration.inHours > 0)
    return "${twoDigits(duration.inHours)}:$twoDigitMinutes:$twoDigitSeconds";
  else
    return "$twoDigitMinutes:$twoDigitSeconds";
}

推荐阅读