53 lines
1.6 KiB
Dart
53 lines
1.6 KiB
Dart
|
||
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 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) {
|
||
final formatted = (value / 10000).toStringAsFixed(decimalDigits);
|
||
return '${removeTrailingZeros(formatted)}w';
|
||
} else {
|
||
final formatted = (value / 1000000).toStringAsFixed(decimalDigits);
|
||
return '${removeTrailingZeros(formatted)}m';
|
||
}
|
||
}
|
||
} |