【发布时间】:2021-10-11 09:45:30
【问题描述】:
我的字符串持续时间如下;
Duration(milliseconds: value).toString())
它产生一个字符串,看起来像这样,带有小时、分钟、秒、毫秒;
0:00:02.658374
我怎样才能让字符串看起来只有几秒和毫秒?
02.65
我只想要两个毫秒的地方。
【问题讨论】:
标签: flutter dart duration converters
我的字符串持续时间如下;
Duration(milliseconds: value).toString())
它产生一个字符串,看起来像这样,带有小时、分钟、秒、毫秒;
0:00:02.658374
我怎样才能让字符串看起来只有几秒和毫秒?
02.65
我只想要两个毫秒的地方。
【问题讨论】:
标签: flutter dart duration converters
如果你只是想从字符串转换,我们可以在这里使用.substring(5, 10)
解释
在我们的Duration().toString() 中,它提供了0:00:02.658374。使用 SubString 我们从第 5 到第 10 个索引中获取文本。但是我们不能在增加小时数时使用这种方法。但它会在我们停留几秒钟和其余时间时起作用。
final time = Duration( seconds: 2, microseconds: 658374);
print(time.toString().substring(5, 10));
我宁愿说,不要这样解析。将来可能会导致一些错误。不要直接获取字符串,而是获取Duration。
有关从 Duration 解析的更多信息,you can check this
你的情况能解决吗?
【讨论】:
substring。它在你的情况下解决了吗?
Duration 是 62 秒,那么像这样盲目地返回子字符串将导致 '02.00' 而不是 '62.00'。
这样做可能更漂亮。它还可以正确地将数字四舍五入,而不仅仅是削减位置:
void main() {
print(durationToString(const Duration(milliseconds: 2658))); // 02:66
}
String durationToString(Duration duration) => (duration.inMilliseconds / 1000)
.toStringAsFixed(2)
.replaceFirst('.', ':')
.padLeft(5, '0');
【讨论】:
尝试如下(使用.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));
【讨论】:
如果你只想要秒和毫秒,我会这样做:
String prettyDuration(Duration duration) {
var seconds = duration.inMilliseconds / 1000;
return '${seconds.toStringAsFixed(2)}s';
}
上面应该输出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 的组件:
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等字符串。
【讨论】: