Перевести секунды в мм: ss в dart

#flutter #dart

#flutter #dart

Вопрос:

Я хочу преобразовать секунды в минуты и секунды в формате HH: SS, но моя логика не дает мне того, что я хочу.

   static double toMin (var value){
            return (value/60);
          }
 

Я также хочу иметь возможность добавлять остаток к значению минут, потому что иногда мое деление дает мне значение секунд, превышающее 60, что неточно

Комментарии:

1. minutes = (seconds modulo 3600) / 60 ?

2. можете ли вы объяснить, как это работает?

3. Вы имеете в виду mm:ss ?

4. @Hamed да, это так

Ответ №1:

Duration Класс может сделать большую часть работы за вас.

 var minutes = Duration(seconds: seconds).inMinutes;
 

Вы могли бы сгенерировать a String в mm:ss формате, выполнив:

 String formatDuration(int totalSeconds) {
  final duration = Duration(seconds: totalSeconds);
  final minutes = duration.inMinutes;
  final seconds = totalSeconds % 60;

  final minutesString = '$minutes'.padLeft(2, '0');
  final secondsString = '$seconds'.padLeft(2, '0');
  return '$minutesString:$secondsString';
}
 

Тем не менее, я не рекомендую использовать mm:ss формат, поскольку без контекста неясно, означает ли «12:34» 12 минут 34 секунды или 12 часов 34 минуты. Я предлагаю вместо этого использовать 12m34s, что однозначно.

Ответ №2:

Вы могли бы попробовать решение ниже, вот как я это делаю:

   String formatHHMMSS(int seconds) {
    if (seconds != null amp;amp; seconds != 0) {
      int hours = (seconds / 3600).truncate();
      seconds = (seconds % 3600).truncate();
      int minutes = (seconds / 60).truncate();

      String hoursStr = (hours).toString().padLeft(2, '0');
      String minutesStr = (minutes).toString().padLeft(2, '0');
      String secondsStr = (seconds % 60).toString().padLeft(2, '0');

      if (hours == 0) {
        return "$minutesStr:$secondsStr";
      }
      return "$hoursStr:$minutesStr:$secondsStr";
    } else {
      return "";
    }
  }
 

Ответ №3:

вы можете сделать что-то вроде этого:

 void main() {
  print(toMMSS(100));
}

String toMMSS(int value) =>
    '${formatDecimal(value ~/ 60)}:${formatDecimal(value % 60)}';

String formatDecimal(num value) => '$value'.padLeft(2, '0');
 

или

 String toMMSS(int value) =>
    '${(value ~/ 60).toString().padLeft(2, '0')}:${(value % 60).toString().padLeft(2, '0')}';
 

кроме того, вы можете создать extension int :

 extension DateTimeExtension on int {
  String get toMMSS =>
      '${(this ~/ 60).toString().padLeft(2, '0')}:${(this % 60).toString().padLeft(2, '0')}';
}
 

использование:

 print(342.toMMSS);
 

Ответ №4:

 static String formatYMDHMSBySeconds(int milliseconds) {
    if (milliseconds == null) {
        return '';
    }

    DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(milliseconds);
    return DateFormat("yyyy-MM-dd HH:mm:ss").format(dateTime);
}