我有下面的持续时间串起来;
Duration(milliseconds: value).toString())
它产生一个字符串,看起来像这样,有小时,分钟,秒,毫秒;
0:00:02.658374
我怎样才能让字符串看起来像这样只有秒和毫秒?
02.65
我只要两个地方的毫秒。
0dxa2lsx1#
尝试如下操作(使用.inSeconds、.inMilliseconds等)。属性),例如:
.inSeconds
.inMilliseconds
log(Duration(milliseconds: 2).toString()); log(Duration(milliseconds: 3).inSeconds.toString()); log(Duration(milliseconds: 4).inMilliseconds.toString()); log(Duration(milliseconds: 5).inMicroseconds.toString());
则变为:
log((Duration(milliseconds: 2658).inMilliseconds * 0.001).toStringAsFixed(2));
k2arahey2#
如果你只是想从字符串转换,我们可以在这里使用.substring(5, 10)
.substring(5, 10)
解释在我们的Duration().toString()中,它提供了0:00:02.658374。使用SubString,我们从第5到第10个索引获取文本。但我们不能在增加工时时使用这种方法。但它将工作,而我们停留在秒和休息。
Duration().toString()
final time = Duration( seconds: 2, microseconds: 658374); print(time.toString().substring(5, 10));
我宁愿说,不要这样解析。将来可能会出现一些错误。不直接获取String,而是获取Duration。更多关于从Duration,you can check this解析你的案子能解决吗?
Duration
44u64gxh3#
做这个也许更漂亮。它还正确地舍入了数字,而不仅仅是削减了位置:
void main() { print(durationToString(const Duration(milliseconds: 2658))); // 02:66 } String durationToString(Duration duration) => (duration.inMilliseconds / 1000) .toStringAsFixed(2) .replaceFirst('.', ':') .padLeft(5, '0');
zte4gxcn4#
如果你只想要秒和毫秒,我会这样做:
String prettyDuration(Duration duration) { var seconds = duration.inMilliseconds / 1000; return '${seconds.toStringAsFixed(2)}s'; }
上面应该输出字符串,如2.65s,62.65s,0.65s,0.00s。如果您需要分钟、秒和毫秒(如问题标题所示):
2.65s
62.65s
0.65s
0.00s
String prettyDuration(Duration duration) { var seconds = (duration.inMilliseconds % (60 * 1000)) / 1000; return '${duration.inMinutes}m${seconds.toStringAsFixed(2)}s'; }
上面应该输出字符串,如1m2.65s,62m0.65s,0m0.00s。一个更复杂的版本,它处理天数和小时数,并省略了0:
1m2.65s
62m0.65s
0m0.00s
String prettyDuration(Duration duration) { var components = <String>[]; var days = duration.inDays; if (days != 0) { components.add('${days}d'); } var hours = duration.inHours % 24; if (hours != 0) { components.add('${hours}h'); } var minutes = duration.inMinutes % 60; if (minutes != 0) { components.add('${minutes}m'); } var seconds = duration.inSeconds % 60; var centiseconds = (duration.inMilliseconds % 1000) ~/ 10; if (components.isEmpty || seconds != 0 || centiseconds != 0) { components.add('$seconds'); if (centiseconds != 0) { components.add('.'); components.add(centiseconds.toString().padLeft(2, '0')); } components.add('s'); } return components.join(); }
上面应该输出字符串,如1d2h3m2.65s,1d2m3s,0s。
1d2h3m2.65s
1d2m3s
0s
hl0ma9xz5#
你可以试试这个:
String seconds = (duration.inSeconds % 60).toString().padLeft(2, '0'); String milliseconds = ((duration.inMilliseconds % 1000) ~/ 100).toString().padLeft(2, '0'); return '$seconds.$milliseconds';
或者
String time = ((duration.inMilliseconds / 1000)).toStringAsFixed(2).padLeft(5, '0'); return time;
两个人都会还给你02.65
5条答案
按热度按时间0dxa2lsx1#
尝试如下操作(使用
.inSeconds
、.inMilliseconds
等)。属性),例如:则变为:
k2arahey2#
如果你只是想从字符串转换,我们可以在这里使用
.substring(5, 10)
解释在我们的
Duration().toString()
中,它提供了0:00:02.658374
。使用SubString,我们从第5到第10个索引获取文本。但我们不能在增加工时时使用这种方法。但它将工作,而我们停留在秒和休息。我宁愿说,不要这样解析。将来可能会出现一些错误。不直接获取String,而是获取
Duration
。更多关于从Duration,you can check this解析你的案子能解决吗?
44u64gxh3#
做这个也许更漂亮。它还正确地舍入了数字,而不仅仅是削减了位置:
zte4gxcn4#
如果你只想要秒和毫秒,我会这样做:
上面应该输出字符串,如
2.65s
,62.65s
,0.65s
,0.00s
。如果您需要分钟、秒和毫秒(如问题标题所示):
上面应该输出字符串,如
1m2.65s
,62m0.65s
,0m0.00s
。一个更复杂的版本,它处理天数和小时数,并省略了0:
上面应该输出字符串,如
1d2h3m2.65s
,1d2m3s
,0s
。hl0ma9xz5#
你可以试试这个:
或者
两个人都会还给你
02.65