Flutter/Dart -格式持续时间显示分钟,秒和毫秒?

62o28rlo  于 2023-05-23  发布在  Flutter
关注(0)|答案(5)|浏览(324)

我有下面的持续时间串起来;

Duration(milliseconds: value).toString())

它产生一个字符串,看起来像这样,有小时,分钟,秒,毫秒;

0:00:02.658374

我怎样才能让字符串看起来像这样只有秒和毫秒?

02.65

我只要两个地方的毫秒。

0dxa2lsx

0dxa2lsx1#

尝试如下操作(使用.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));
k2arahey

k2arahey2#

如果你只是想从字符串转换,我们可以在这里使用.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));


我宁愿说,不要这样解析。将来可能会出现一些错误。不直接获取String,而是获取Duration。更多关于从Duration,you can check this解析
你的案子能解决吗?

44u64gxh

44u64gxh3#

做这个也许更漂亮。它还正确地舍入了数字,而不仅仅是削减了位置:

void main() {
  print(durationToString(const Duration(milliseconds: 2658))); // 02:66
}

String durationToString(Duration duration) => (duration.inMilliseconds / 1000)
    .toStringAsFixed(2)
    .replaceFirst('.', ':')
    .padLeft(5, '0');
zte4gxcn

zte4gxcn4#

如果你只想要秒和毫秒,我会这样做:

String prettyDuration(Duration duration) {
  var seconds = duration.inMilliseconds / 1000;
  return '${seconds.toStringAsFixed(2)}s';
}

上面应该输出字符串,如2.65s62.65s0.65s0.00s
如果您需要分钟、秒和毫秒(如问题标题所示):

String prettyDuration(Duration duration) {
  var seconds = (duration.inMilliseconds % (60 * 1000)) / 1000;
  return '${duration.inMinutes}m${seconds.toStringAsFixed(2)}s';
}

上面应该输出字符串,如1m2.65s62m0.65s0m0.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.65s1d2m3s0s

hl0ma9xz

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

相关问题