作者 朱兆平

增加年龄计算

@@ -31,6 +31,8 @@ public final class DateUtil { @@ -31,6 +31,8 @@ public final class DateUtil {
31 31
32 public static String F8 = "yyyyMMdd"; 32 public static String F8 = "yyyyMMdd";
33 33
  34 + public static String F6 = "yyyyMM";
  35 +
34 public static String[] dataStringFormats = {F8, F10, F14, F19, "yyyy/MM/dd", "yyyy/MM/dd HH:mm", "yyyy/MM/dd HH:mm:ss", "yyyy-MM-dd HH:mm"}; 36 public static String[] dataStringFormats = {F8, F10, F14, F19, "yyyy/MM/dd", "yyyy/MM/dd HH:mm", "yyyy/MM/dd HH:mm:ss", "yyyy-MM-dd HH:mm"};
35 37
36 private static Date currentDate = new Date(); 38 private static Date currentDate = new Date();
@@ -445,4 +447,41 @@ public final class DateUtil { @@ -445,4 +447,41 @@ public final class DateUtil {
445 Instant instant = localDateTime.atZone(zone).toInstant(); 447 Instant instant = localDateTime.atZone(zone).toInstant();
446 java.util.Date date = Date.from(instant); 448 java.util.Date date = Date.from(instant);
447 } 449 }
  450 +
  451 + /**
  452 + * 根据出生日期计算年龄
  453 + * @param birthDay
  454 + * @return
  455 + * @throws ParseException
  456 + */
  457 + public static int getAgeByBirth(Date birthDay) throws ParseException {
  458 + int age = 0;
  459 + Calendar cal = Calendar.getInstance();
  460 + //出生日期晚于当前时间,无法计算
  461 + if (cal.before(birthDay)) {
  462 + throw new IllegalArgumentException(
  463 + "The birthDay is before Now.It's unbelievable!");
  464 + }
  465 + //当前年份
  466 + int yearNow = cal.get(Calendar.YEAR);
  467 + //当前月份
  468 + int monthNow = cal.get(Calendar.MONTH);
  469 + //当前日期
  470 + int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
  471 + cal.setTime(birthDay);
  472 + int yearBirth = cal.get(Calendar.YEAR);
  473 + int monthBirth = cal.get(Calendar.MONTH);
  474 + int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
  475 + //计算整岁数
  476 + age = yearNow - yearBirth;
  477 + if (monthNow <= monthBirth) {
  478 + if (monthNow == monthBirth) {
  479 + //当前日期在生日之前,年龄减一
  480 + if (dayOfMonthNow < dayOfMonthBirth){ age--;}
  481 + } else {
  482 + age--;//当前月份在生日之前,年龄减一
  483 + }
  484 + }
  485 + return age;
  486 + }
448 } 487 }