import 'package:intl/intl.dart'; class AgeZodiacSignUtil { AgeZodiacSignUtil._(); /// 计算星座(传入 DateTime) static String getZodiacSign(DateTime date) { int month = date.month; int day = date.day; if ((month == 3 && day >= 21) || (month == 4 && day <= 19)) { return '白羊座'; } else if ((month == 4 && day >= 20) || (month == 5 && day <= 20)) { return '金牛座'; } else if ((month == 5 && day >= 21) || (month == 6 && day <= 20)) { return '双子座'; } else if ((month == 6 && day >= 21) || (month == 7 && day <= 22)) { return '巨蟹座'; } else if ((month == 7 && day >= 23) || (month == 8 && day <= 22)) { return '狮子座'; } else if ((month == 8 && day >= 23) || (month == 9 && day <= 22)) { return '处女座'; } else if ((month == 9 && day >= 23) || (month == 10 && day <= 22)) { return '天秤座'; } else if ((month == 10 && day >= 23) || (month == 11 && day <= 21)) { return '天蝎座'; } else if ((month == 11 && day >= 22) || (month == 12 && day <= 21)) { return '射手座'; } else if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) { return '摩羯座'; } else if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) { return '水瓶座'; } else if ((month == 2 && day >= 19) || (month == 3 && day <= 20)) { return '双鱼座'; } else { return '未知星座'; } } /// 计算年龄(传入 DateTime) static int calculateAge(DateTime birthDate) { DateTime currentDate = DateTime.now(); int age = currentDate.year - birthDate.year; if (currentDate.month < birthDate.month || (currentDate.month == birthDate.month && currentDate.day < birthDate.day)) { age--; } return age; } /// 从字符串计算星座 static String getZodiacSignFromString(String dateStr, {String format = 'yyyy-MM-dd'}) { try { DateTime date = DateFormat(format).parse(dateStr); return getZodiacSign(date); } catch (e) { return '无效日期'; } } /// 从字符串计算年龄 static int? calculateAgeFromString(String dateStr, {String format = 'yyyy-MM-dd'}) { try { DateTime date = DateFormat(format).parse(dateStr); return calculateAge(date); } catch (e) { return null; } } }