mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-20 03:06:59 +08:00
56 lines
1.7 KiB
Dart
56 lines
1.7 KiB
Dart
import 'dart:math' show pow;
|
||
|
||
abstract final class DurationUtils {
|
||
static String formatDuration(num? seconds) {
|
||
if (seconds == null || seconds == 0) {
|
||
return '00:00';
|
||
}
|
||
int h = seconds ~/ 3600;
|
||
seconds %= 3600;
|
||
int m = seconds ~/ 60;
|
||
seconds %= 60;
|
||
String sms = seconds is double
|
||
? seconds.toStringAsFixed(3).padLeft(6, '0')
|
||
: seconds.toString().padLeft(2, '0');
|
||
return h == 0
|
||
? "${m.toString().padLeft(2, '0')}:$sms"
|
||
: "${h.toString().padLeft(2, '0')}:${m.toString().padLeft(2, '0')}:$sms";
|
||
}
|
||
|
||
static final _splitRegex = RegExp(r'[::]');
|
||
static int parseDuration(String? data) {
|
||
if (data == null || data.isEmpty) {
|
||
return 0;
|
||
}
|
||
List<int> split = data.split(_splitRegex).reversed.map(int.parse).toList();
|
||
int duration = 0;
|
||
for (int i = 0; i < split.length; i++) {
|
||
duration += split[i] * pow(60, i).toInt();
|
||
}
|
||
return duration;
|
||
}
|
||
|
||
static String formatDurationBetween(int startMillis, int endMillis) =>
|
||
formatTimeDuration(Duration(milliseconds: endMillis - startMillis));
|
||
|
||
static String formatTimeDuration(Duration duration) {
|
||
final inDays = duration.inDays;
|
||
final daysLeft = inDays % 365;
|
||
final years = inDays ~/ 365;
|
||
final months = daysLeft ~/ 30;
|
||
final days = daysLeft % 30;
|
||
final hours = duration.inHours % 24;
|
||
final minutes = duration.inMinutes % 60;
|
||
|
||
final format = StringBuffer();
|
||
|
||
if (years > 0) format.write('$years年');
|
||
if (months > 0) format.write('$months月');
|
||
if (days > 0) format.write('$days天');
|
||
if (hours > 0) format.write('$hours小时');
|
||
if (minutes > 0) format.write('$minutes分钟');
|
||
|
||
return format.toString();
|
||
}
|
||
}
|