60 lines
1.7 KiB
Dart
60 lines
1.7 KiB
Dart
import 'package:intl/intl.dart';
|
||
|
||
/// 通用格式化工具。
|
||
class Formatters {
|
||
Formatters._();
|
||
|
||
static final DateFormat _dateTimeFormat = DateFormat('yyyy-MM-dd HH:mm:ss');
|
||
static final DateFormat _dateFormat = DateFormat('yyyy-MM-dd');
|
||
|
||
/// 格式化日期时间。
|
||
static String formatDateTime(DateTime value) {
|
||
return _dateTimeFormat.format(value);
|
||
}
|
||
|
||
/// 仅格式化日期(YYYY-MM-DD),用于门店到期时间等只需日期的场景。
|
||
static String formatDate(DateTime value) {
|
||
return _dateFormat.format(value);
|
||
}
|
||
|
||
/// 将百分比值格式化为带一位小数的字符串,如 `72.5%`。
|
||
static String formatPercent(double ratio) {
|
||
return '${(ratio * 100).toStringAsFixed(1)}%';
|
||
}
|
||
|
||
/// 将字节数格式化为可读单位(KB/MB/GB/TB)。
|
||
static String formatBytes(int bytes) {
|
||
if (bytes < 1024) {
|
||
return '$bytes B';
|
||
}
|
||
const units = ['KB', 'MB', 'GB', 'TB'];
|
||
double value = bytes.toDouble();
|
||
int unitIndex = -1;
|
||
do {
|
||
value /= 1024;
|
||
unitIndex++;
|
||
} while (value >= 1024 && unitIndex < units.length - 1);
|
||
return '${value.toStringAsFixed(1)} ${units[unitIndex]}';
|
||
}
|
||
|
||
/// 将秒数格式化为运行时长字符串,如 `3天 5小时 12分`。
|
||
static String formatUptime(int seconds) {
|
||
final duration = Duration(seconds: seconds);
|
||
final days = duration.inDays;
|
||
final hours = duration.inHours % 24;
|
||
final minutes = duration.inMinutes % 60;
|
||
|
||
final parts = <String>[];
|
||
if (days > 0) {
|
||
parts.add('$days天');
|
||
}
|
||
if (hours > 0) {
|
||
parts.add('$hours小时');
|
||
}
|
||
if (minutes > 0 || parts.isEmpty) {
|
||
parts.add('$minutes分');
|
||
}
|
||
return parts.join(' ');
|
||
}
|
||
}
|