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

60 lines
1.7 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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