首页 > 技术文章 > Java计算年龄

a7e7 2020-11-17 21:27 原文

实现方法

方法1

粗略计算,只对年份进行计算

import java.util.Calendar;
public class Test {
    public static void main(String[] args) {
        // 模拟输入一个日期
        String date = "29991117";
        // 打印结果
        System.out.println(age(date));
    }
    /**
     * 计算年龄的方法
     * @param str 输入个年月日
     * @return 年龄
     */
    public static String age(String str) {
        // 使用默认时区和语言环境获得一个日历
        Calendar cal = Calendar.getInstance();
        int a = Integer.parseInt((str.subSequence(0, 4).toString())); // 输入的年
        int b = cal.get(Calendar.YEAR); // 当前的年
        if (a <= b) {
            return "年龄:" + (b - a) + "岁";
        } else {
            return "年龄计算错误,输入出生时间存在未来";
        }
    }
}

方法2

计算年龄的方法,精确到日(周岁)

判断身份证出生日期合理性

粗略判断
  1. 出生年份大于等于当前年,且出生年大于10000年;
  2. 出生月份小于等于12,且大于0;
  3. 出生日小于等于31,且大于0;
进一步判断
  1. 闰年2月的问题,闰年2月的日期小于等于29天;
  2. 非闰年2月的日期小于等于28天;
  3. 出生月份为4,6,9,11的日期小于等于30天;
  4. 出生年月日应当晚于或等于当前年月日;

计算年龄的方法

  1. 先看“年”,用当前年份减去生日年份得出年龄age
  2. 再看“月”,如果当前月份小于生日月份,说明未满周岁age,年龄age需减1;如果当前月份大于等于生日月份,则说明满了周岁age,计算over!
  3. 最后“日”,如果月份相等并且当前日小于等于出生日,说明仍未满周岁,年龄age需减1;反之满周岁age,over!

定义

闰年:指的能被4整除的年份,闰年的2月有29天,而非闰年的2月有28天。

import java.util.Calendar;

/**
 * Test
 */
public class Test {

    public static void main(String[] args) {
        // 模拟输入一个日期
        String date = "19971211";

        // 打印结果
        System.out.println(getAge(date));

    }

    /**
     * @param str 18位身份证号
     * @return 年龄
     */
    public static String getAge(String str) {

        // 使用默认时区和语言环境获得一个日历
        Calendar cal = Calendar.getInstance();
        int a = Integer.parseInt((str.subSequence(0, 4).toString())); // 输入的年
        int a1 = Integer.parseInt((str.subSequence(4, 6).toString())); // 输入的月
        int a2 = Integer.parseInt((str.subSequence(6, 8).toString())); // 输入的日
        int b = cal.get(Calendar.YEAR); // 当前的年
        int b1 = cal.get(Calendar.MONDAY) + 1; // 当前的月
        int b2 = cal.get(Calendar.DAY_OF_MONTH); // 当前的日

        // 粗略判断
        String err = "身份证号中的出生年月日有误";
        if (a > b || a < 1000 || a1 > 12 || a1 <= 0 || a2 > 31 || a2 <= 0) {
            return err;
        }

        // 进一步判断
        if ((a % 4 == 0 && a1 == 2 && a2 > 29) || (a % 4 != 0 && a1 == 2 && a2 > 28)
                || ((a1 == 4 || a1 == 6 || a1 == 9 || a1 == 11) && a2 > 30)
                || (a == b && (a1 < b1 || (a1 == b1 && a2 > b2)))) {
            return err;
        }

        // 计算年龄
        int age = b - a;
        if (b1 < a1 || (b1 == a1 && b2 <= a2)) {
            age--;
        }
        return "年龄:" + age + "岁";

    }
}

参考资料

  1. 博客园 java计算年龄
  2. CSDN Java中Calendar类的常用方法
  3. CSDN Java 如何将String转化为Int
  4. CSDN java-根据生日计算周岁

推荐阅读