【问题标题】:Flutter/Dart - Format Duration to show just Minutes, Seconds and Milliseconds?Flutter/Dart - 格式化持续时间以仅显示分钟、秒和毫秒?
【发布时间】:2021-10-11 09:45:30
【问题描述】:

我的字符串持续时间如下;

  Duration(milliseconds: value).toString())

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

  0:00:02.658374

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

 02.65

我只想要两个毫秒的地方。

【问题讨论】:

    标签: flutter dart duration converters


    【解决方案1】:

    如果你只是想从字符串转换,我们可以在这里使用.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'
    • 是的,62 超过了第二。我在上面提到过。
    【解决方案2】:

    这样做可能更漂亮。它还可以正确地将数字四舍五入,而不仅仅是削减位置:

    void main() {
      print(durationToString(const Duration(milliseconds: 2658))); // 02:66
    }
    
    String durationToString(Duration duration) => (duration.inMilliseconds / 1000)
        .toStringAsFixed(2)
        .replaceFirst('.', ':')
        .padLeft(5, '0');
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我不关注。这如何将 0:00:02.658374 转换为 02.65 ?
      • 给定的毫秒数是多少?
      • 2658 毫秒需要看起来像 02:65
      • 我希望你明白如何(现在更新答案后)。
      【解决方案4】:

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

      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等字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-04
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        • 2019-08-19
        • 2012-06-08
        • 2010-12-22
        相关资源
        最近更新 更多