Dart-将毫秒转换为字符串

时间:2019-07-10 12:02:01

标签: flutter dart milliseconds

我正在使用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";
}

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

2 个答案:

答案 0 :(得分:1)

根据此answer,您可以实现这样的方法:

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";
}

答案 1 :(得分:-1)

要以毫秒为单位划分时间,可以使用Duration类

要将数字转换为带有前导零的字符串(以及任何其他字符串格式),请使用c样式sprintf,该格式采用%的字符串格式(其中缺少值)以及这些值的列表。通过谷歌搜索printf来读取格式,但是基本上%05i意味着使该整数占据5个空格并使用前导0。

import 'package:sprintf/sprintf.dart';


String convertTime(int timeInMilliseconds) {
  Duration timeDuration = Duration(milliseconds: timeInMilliseconds);
  int centiseconds = timeDuration.inMilliseconds ~/ 10;
  int seconds = timeDuration.inSeconds;
  int minutes = timeDuration.inMinutes;
  int hours = timeDuration.inHours;

  if (hours > 0){
    return sprintf('%i:%02i:%02i.%02i', [hours, minutes, seconds, centiseconds]);
  }else if(minutes > 0){
    return sprintf('i:%02i.%02i', [minutes, seconds, centiseconds]);
  }else {
    return sprintf('i.%02i', [seconds, centiseconds]);
  }    
}

我希望这会有所帮助