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 = []; if (days > 0) { parts.add('$days天'); } if (hours > 0) { parts.add('$hours小时'); } if (minutes > 0 || parts.isEmpty) { parts.add('$minutes分'); } return parts.join(' '); } }