如何在Dart中将秒转换为分钟?

11

我学习Dart和flutter已经两天了,对于如何将秒数(例如1500秒)转换为分钟感到困惑。

为了学习这门新语言,我正在制作番茄钟计时器,并且为了测试目的,我想将秒数转换为MM:SS格式。到目前为止,我得到了以下代码,但是我已经卡住了几个小时......我在谷歌上搜索了一下,但无法解决这个问题,所以我使用了Stackoverflow。我应该怎么修复这段代码?

int timeLeftInSec = 1500;
void startOrStop() {
  timer = Timer.periodic(Duration(seconds: 1), (timer) {
    setState(() {
      if (timeLeftInSec > 0) {
        timeLeftInSec--;
        timeLeft = Duration(minutes: ???, seconds: ???)
      } else {
        timer.cancel();
      }
    }
  }
}

你可以将超过60秒的参数传递给“持续时间(Duration)”。 - julemand101
1
重复的问题:https://dev59.com/z1QJ5IYBdhLWcg3wBRA4? - Huiting
这个回答解决了你的问题吗?将持续时间格式化为 HH:mm:ss - user1506104
7个回答

27
这段代码对我来说有效。
formattedTime({required int timeInSecond}) {
  int sec = timeInSecond % 60;
  int min = (timeInSecond / 60).floor();
  String minute = min.toString().length <= 1 ? "0$min" : "$min";
  String second = sec.toString().length <= 1 ? "0$sec" : "$sec";
  return "$minute : $second";
}

现在只需调用函数
formattedTime(timeInSecond: 152)

格式化时间示例

screenshot


22

未格式化:

int mins = Duration(seconds: 120).inMinutes; // 2 mins

格式:

String formatTime(int seconds) {
  return '${(Duration(seconds: seconds))}'.split('.')[0].padLeft(8, '0');
}

void main() {
  String time = formatTime(3700); // 01:01:11
}

inMinutes "返回值可能大于59。" 这个回答让我浪费了10分钟追踪错误,谢谢。 - cs guy

9

你可以尝试这样做:

int minutes = (seconds / 60).truncate();
String minutesStr = (minutes % 60).toString().padLeft(2, '0');

谢谢,现在它可以工作了。但是为什么我需要在String minutesStr = (minutes % 60).toString().padLeft(2, '0');中加入分钟?现在分钟等于1,而分钟%60等于.0166... 我认为pad left会添加两个零... - user13433173

5

这是我实现所需的MM:SS格式的方法:

Duration(seconds: _secondsLeft--).toString().substring(2, 7);

以下是toString方法返回值的示例:

d = Duration(days: 0, hours: 1, minutes: 10, microseconds: 500);
d.toString();  // "1:10:00.000500"

使用链接的 substring 方法可轻松实现更多格式,例如 HH:MM:SS 等。


1
最佳答案是所有答案中最好的。 - Hitesh Kumar Saini

2
有很多真实的答案被给出。
我用一种新的、非常简短的方法给出答案。
为了简单起见,我创建了一个函数/方法。
时间格式为MM:SS(分钟:秒)。
  String formattedTime(int time) // --> time in form of seconds
  {    
    final int sec = time % 60;
    final int min = (time / 60).floor();
    return "${min.toString().padLeft(2, '0')}:${sec.toString().padLeft(2, '0')}";
  }

时间格式为HH:MM:SS(小时:分钟:秒)
  String formattedTime2( int time ) // --> time in form of seconds
  {
    final int hour = (time / 3600).floor();
    final int minute = ((time / 3600 - hour) * 60).floor();
    final int second = ((((time / 3600 - hour) * 60) - minute) * 60).floor();

    final String setTime = [
      if (hour > 0) hour.toString().padLeft(2, "0"),
      minute.toString().padLeft(2, "0"),
      second.toString().padLeft(2, '0'),
    ].join(':');
    return setTime;
  }

1

看看这段代码,它可以实现一个带有格式化输出的倒计时器

import 'dart:async';

void main(){
  late Timer timer;
  int startSeconds = 120; //time limit
  String timeToShow = "";
  timer =  Timer.periodic(Duration(seconds:1 ),(time){
    startSeconds = startSeconds-1;
    if(startSeconds ==0){
      timer.cancel();
     }

    int minutes = (startSeconds/60).toInt();
    int seconds = (startSeconds%60);
   timeToShow = minutes.toString().padLeft(2,"0")+"."+seconds.toString().padLeft(2,"0");
   print(timeToShow);
  });
}

    /*output
    01.59
    01.58 
    01.57
    ...
    ...
    ...
    00.02
    00.01
    00.00*/

0
static int timePassedFromNow(String? dateTo) {
  if (dateTo != null) {
    DateTime targetDateTime = DateTime.parse(dateTo);
    DateTime dateTimeNow = DateTime.now();
    if (targetDateTime.isAfter(dateTimeNow)) {
      Duration differenceInMinutes = dateTimeNow.difference(targetDateTime);
      return differenceInMinutes.inSeconds;
    }
  }

  return 0;
}

static String timeLeft(int seconds) {
int diff = seconds;

int days = diff ~/ (24 * 60 * 60);
diff -= days * (24 * 60 * 60);
int hours = diff ~/ (60 * 60);
diff -= hours * (60 * 60);
int minutes = diff ~/ (60);
diff -= minutes * (60);

String result = "${twoDigitNumber(days)}:${twoDigitNumber(hours)}:${twoDigitNumber(minutes)}";

return result;
}

static String twoDigitNumber(int? dateTimeNumber) {
  if (dateTimeNumber == null) return "0";
  return (dateTimeNumber < 9 ? "0$dateTimeNumber" : dateTimeNumber).toString();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接