Formatting a Duration like HH:mm:ss

后端 未结 11 960
孤城傲影
孤城傲影 2020-12-05 22:53

Is there a good way to format a Duration in something like hh:mm:ss, without having to deal with time zones?

I tried this:

DateTime durationDate = Da         


        
相关标签:
11条回答
  • 2020-12-05 23:47

    Here's another version. It's all preference at this point, but I liked that it was dry and didn't need a function declaration (the wrapping function is obviously optional) though it is definately a bit function chaining heavy.

    Compact

    String formatTime(double time) {
        Duration duration = Duration(milliseconds: time.round());
        return [duration.inHours, duration.inMinutes, duration.inSeconds].map((seg) => seg.remainder(60).toString().padLeft(2, '0')).join(':');
    }
    

    Formatted version

    String timeFormatter (double time) {
        Duration duration = Duration(milliseconds: time.round());
    
        return [duration.inHours, duration.inMinutes, duration.inSeconds]
          .map((seg) => seg.remainder(60).toString().padLeft(2, '0'))
          .join(':');
    }
    
    0 讨论(0)
  • 2020-12-05 23:47

    The shortest, most elegant and reliable way to get HH:mm:ss from a Duration is doing:

    format(Duration d) => d.toString().split('.').first.padLeft(8, "0");
    

    Example usage:

    main() {
      final d1 = Duration(hours: 17, minutes: 3);
      final d2 = Duration(hours: 9, minutes: 2, seconds: 26);
      final d3 = Duration(milliseconds: 0);
      print(format(d1)); // 17:03:00
      print(format(d2)); // 09:02:26
      print(format(d3)); // 00:00:00
    }
    
    0 讨论(0)
  • 2020-12-05 23:48

    You can start creating a format yourself, come on this one:

    String sDuration="${duration.inHours}:${duration.inMinutes.remainder(60)}:${(duration.inSeconds.remainder(60))}
    
    0 讨论(0)
  • 2020-12-05 23:52

    You can use Duration and implement this method:

    String _printDuration(Duration duration) {
      String twoDigits(int n) => n.toString().padLeft(2, "0");
      String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60));
      String twoDigitSeconds = twoDigits(duration.inSeconds.remainder(60));
      return "${twoDigits(duration.inHours)}:$twoDigitMinutes:$twoDigitSeconds";
    }
    

    Usage:

    final now = Duration(seconds: 30);
    print("${_printDuration(now)}");
    
    0 讨论(0)
  • 2020-12-05 23:52
    format(Duration d) => d.toString().split('.').first.padLeft(8, "0");
    
    main() {
      final d1 = Duration(hours: 17, minutes: 3);
      final d2 = Duration(hours: 9, minutes: 2, seconds: 26);
      final d3 = Duration(milliseconds: 0);
      print(format(d1)); // 17:03:00
      print(format(d2)); // 09:02:26
      print(format(d3)); // 00:00:00
    }
    
    0 讨论(0)
提交回复
热议问题