age_zodiac_sign_util.dart 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import 'package:intl/intl.dart';
  2. class AgeZodiacSignUtil {
  3. AgeZodiacSignUtil._();
  4. /// 计算星座(传入 DateTime)
  5. static String getZodiacSign(DateTime date) {
  6. int month = date.month;
  7. int day = date.day;
  8. if ((month == 3 && day >= 21) || (month == 4 && day <= 19)) {
  9. return '白羊座';
  10. } else if ((month == 4 && day >= 20) || (month == 5 && day <= 20)) {
  11. return '金牛座';
  12. } else if ((month == 5 && day >= 21) || (month == 6 && day <= 20)) {
  13. return '双子座';
  14. } else if ((month == 6 && day >= 21) || (month == 7 && day <= 22)) {
  15. return '巨蟹座';
  16. } else if ((month == 7 && day >= 23) || (month == 8 && day <= 22)) {
  17. return '狮子座';
  18. } else if ((month == 8 && day >= 23) || (month == 9 && day <= 22)) {
  19. return '处女座';
  20. } else if ((month == 9 && day >= 23) || (month == 10 && day <= 22)) {
  21. return '天秤座';
  22. } else if ((month == 10 && day >= 23) || (month == 11 && day <= 21)) {
  23. return '天蝎座';
  24. } else if ((month == 11 && day >= 22) || (month == 12 && day <= 21)) {
  25. return '射手座';
  26. } else if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) {
  27. return '摩羯座';
  28. } else if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) {
  29. return '水瓶座';
  30. } else if ((month == 2 && day >= 19) || (month == 3 && day <= 20)) {
  31. return '双鱼座';
  32. } else {
  33. return '未知星座';
  34. }
  35. }
  36. /// 计算年龄(传入 DateTime)
  37. static int calculateAge(DateTime birthDate) {
  38. DateTime currentDate = DateTime.now();
  39. int age = currentDate.year - birthDate.year;
  40. if (currentDate.month < birthDate.month ||
  41. (currentDate.month == birthDate.month && currentDate.day < birthDate.day)) {
  42. age--;
  43. }
  44. return age;
  45. }
  46. /// 从字符串计算星座
  47. static String getZodiacSignFromString(String dateStr, {String format = 'yyyy-MM-dd'}) {
  48. try {
  49. DateTime date = DateFormat(format).parse(dateStr);
  50. return getZodiacSign(date);
  51. } catch (e) {
  52. return '无效日期';
  53. }
  54. }
  55. /// 从字符串计算年龄
  56. static int? calculateAgeFromString(String dateStr, {String format = 'yyyy-MM-dd'}) {
  57. try {
  58. DateTime date = DateFormat(format).parse(dateStr);
  59. return calculateAge(date);
  60. } catch (e) {
  61. return null;
  62. }
  63. }
  64. }