(一)Duration 是有正负之分
1、获取常用的参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import 'Test/Test.dart';
main() { Duration stim = Duration( days: 0, hours: 1, minutes: 0, seconds: 30, milliseconds: 000, microseconds: 00 ); print("获取天数值:${stim.inDays}"); print("获取总的秒数值:${stim.inSeconds}"); print("获取小时数值:${stim.inMinutes}"); print(stim.toString()); print(stim.isNegative); print(stim.abs()); }
|
2、比较两个 Duration 类型的大小,可以应用于比较两个视频的时间长短等等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import 'Test/Test.dart';
main() { Duration stim = Duration( days: 0, hours: 1, minutes: 0, seconds: 30, milliseconds: 000, microseconds: 00 ); Duration stim1=Duration( days: 0,hours: 0,minutes: 0, seconds:30,milliseconds: 000,microseconds: 00 ); print(stim.compareTo(stim1)); }
|
3、Duration 类型的常用比较,如两个 Duration 相加,相减等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import 'Test/Test.dart';
main() { Duration stim = Duration( days: 0, hours: 0, minutes: 0, seconds: 30, milliseconds: 000, microseconds: 00 ); Duration stim1=Duration( days: 0,hours: 0,minutes: 0, seconds:30,milliseconds: 000,microseconds: 00 );
print(stim+stim1); print(stim-stim1); print(stim*2); print(stim ~/100); }
|
4、Duration 类型截取指定部份显示。
通过上面的示例不难看出一个问题就是 Duration 显示的时间跨度是带有小数点的,如(0:01:00.000000)。而且显示的是小数点后面 6 位,在实际的应用中,我们只需要显示时:分: 秒的格式(如:0:01:30)。或者像视频进度条里显示的格式(01:30)。那么如何实现这种效果呢?实现方式如下
1 2 3 4 5 6 7 8 9 10 11 12
| 获取Duration-->转为字符串-->利用字符串的截取方法截取指定的位置字符串。 main() { Duration stim = Duration( days: 0, hours: 0, minutes: 60, seconds: 30, milliseconds: 40, microseconds: 50 ); print(stim); String str=stim.toString(); print(str.substring(2,7)); print(str.substring(0,7)); }
|
(二)Timer 定时器
1 2 3 4
| Timer( Duration duration, void callback() )
|
构造方法:
1 2 3 4 5 6
| const timeout = const Duration(seconds: 5); print('currentTime ='+DateTime.now().toString()); Timer(timeout, () { print('after 5s Time ='+DateTime.now().toString()); });
|
Timer.periodic执行多次回调:
回调多次的定时器用法和回调一次的差不多,区别有下面两点:
1、API 调用不同
2、需要手动取消,否则会一直回调,因为是周期性的
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| z`t count = 0; const period = const Duration(seconds: 1); print('currentTime='+DateTime.now().toString()); Timer.periodic(period, (timer) { print('afterTimer='+DateTime.now().toString()); count++; if (count >= 5) { timer.cancel(); timer = null; } });
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import 'dart:async';
main() { int count = 0; Timer timer; Timer.periodic(Duration(seconds: 1), (timer) { if (count == 5) { timer.cancel(); return; } count++; print(count); }); }
|
(三)时间转换
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| void transformTime(int times) { int date = 0, hour = 0, minute = 0, second = 0; if (times > 0) { date = times ~/ 86400; hour = ((times - 86400 * date) ~/ 3600); minute = (times - 86400 * date - hour * 3600) ~/ 60; second = ((times - 86400 * date - hour * 3600 - minute * 60) % 60).toInt(); } if (times < 60) { timer = times < 10 ? ('00:' + '0${second}') : ('00:' + '${second}'); } else if (times > 3600) { timer = '${hour}:' + '${minute}:' + '${second}'; } }
|
(四)字符串
Dart 的 String 字符串的常用方法