我正在使用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";
}
如何改善我的代码?进行此转换的最有效方法是什么?
答案 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]);
}
}
我希望这会有所帮助