Files
CloudHome-Ops/lib/utils/formatters.dart

60 lines
1.7 KiB
Dart
Raw Normal View History

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(' ');
}
}