有时我们需要天、小时、分钟、秒来倒计时,但我们只知道秒。
例如:
这是我的解决方案:
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 或简单的方法来实现它无需任何计算。
我想知道更好的解决方案。
答案 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
}