class SkyTimeTool { static String getTimeZone() { final offset = DateTime.now().timeZoneOffset; final hours = offset.inHours; final minutes = offset.inMinutes.remainder(60).abs(); final sign = hours >= 0 ? '+' : '-'; final formatted = 'GMT$sign${hours.abs().toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}'; return formatted; } //格式化数字,带单位 k / m,可自定义小数位和千分位分隔符 static String formatNum( num value, { int decimalDigits = 1, String separator = ',', String unit = 'k', }) { String removeTrailingZeros(String str) { if (str.contains('.')) { str = str.replaceAll(RegExp(r'0+$'), ''); // 去掉末尾 0 str = str.replaceAll(RegExp(r'\.$'), ''); // 去掉末尾小数点 } return str; } String addSeparator(String str) { final parts = str.split('.'); final intPart = parts[0]; final decPart = parts.length > 1 ? '.${parts[1]}' : ''; final regex = RegExp(r'(\d+)(\d{3})'); var formatted = intPart; while (regex.hasMatch(formatted)) { formatted = formatted.replaceAllMapped( regex, (m) => '${m[1]}$separator${m[2]}', ); } return '$formatted$decPart'; } if (value < 1000) { return addSeparator(value.toStringAsFixed(0)); } else if (value < 1000000) { int mu = unit=='w' ? 10000 : 1000; final formatted = (value / mu).toStringAsFixed(decimalDigits); return '${removeTrailingZeros(formatted)}$unit'; } else { final formatted = (value / 1000000).toStringAsFixed(decimalDigits); return '${removeTrailingZeros(formatted)}m'; } } }