飞镖|无需计算即可将秒数转换为 DateTime

时间:2021-07-08 06:16:24

标签: flutter dart

有时我们需要天、小时、分钟、秒来倒计时,但我们只知道秒。

例如:

  • 1s -> 0day 0hour 0minute 1s
  • 10s -> 0day 0hour 0minute 10s
  • 100 秒 -> 0 天 0 小时 1 分钟 40 秒

这是我的解决方案:

void _test() {
  var diffseconds = 100;

  var seconds = diffseconds % 60;
  var minute = diffseconds ~/ 60 % 60;
  var hour = diffseconds ~/ 60 ~/ 60 % 24;
  var day = diffseconds ~/ 60 ~/ 60 ~/ 24;

  print('day=$day');
  print('hour=$hour');
  print('minute=$minute');
  print('second=$seconds');
}

如果我可以将秒更改为 DateTime,我可以使用 date.day 等轻松获得日期,而我不再需要计算。

所以我想知道是否有任何 api 或简单的方法来实现它无需任何计算

我想知道更好的解决方案。

2 个答案:

答案 0 :(得分:2)

只需使用 Duration(seconds: seconds),它可以处理超过 60 的值。

Duration(seconds: 123) // 2 minutes and 3 seconds

答案 1 :(得分:1)

我不认为此功能已内置于 Dart 中,但您可以稍微轻松地将以下扩展添加到 Duration,这或多或少是您已经在做的:

extension RestTimeOnDuration on Duration {
  int get inDaysRest => inDays;
  int get inHoursRest => inHours - (inDays * 24);
  int get inMinutesRest => inMinutes - (inHours * 60);
  int get inSecondsRest => inSeconds - (inMinutes * 60);
  int get inMillisecondsRest => inMilliseconds - (inSeconds * 1000);
  int get inMicrosecondsRest => inMicroseconds - (inMilliseconds * 1000);
}

void main() {
  const duration = Duration(seconds: 123);
  print('Days: ${duration.inDaysRest}'); // 0
  print('Hours: ${duration.inHoursRest}'); // 0
  print('Minutes: ${duration.inMinutesRest}'); // 2
  print('Seconds: ${duration.inSecondsRest}'); // 3
  print('Milliseconds: ${duration.inMillisecondsRest}'); // 0
  print('Microseconds: ${duration.inMicrosecondsRest}'); // 0
}