Java --- 根据身份证号计算年龄

介绍

根据身份证号计算年龄

Java代码

java 复制代码
/**
     * 根据身份证号计算年龄
     * @param birthDateStr
     * @return
     */
    public static int calculateAge(String birthDateStr) {
        try {
            birthDateStr=birthDateStr.substring(6,6+8);
            // 定义日期格式
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            // 将字符串类型的出生日期转换为 Date 对象
            Date birthDate = sdf.parse(birthDateStr);
            // 获取当前的日期和时间
            Calendar now = Calendar.getInstance();
            // 获取当前年份
            int currentYear = now.get(Calendar.YEAR);
            // 获取当前月份
            int currentMonth = now.get(Calendar.MONTH) + 1;
            // 获取当前日期
            int currentDay = now.get(Calendar.DAY_OF_MONTH);

            // 创建一个 Calendar 对象来表示出生日期
            Calendar birthCalendar = Calendar.getInstance();
            birthCalendar.setTime(birthDate);
            // 获取出生年份
            int birthYear = birthCalendar.get(Calendar.YEAR);
            // 获取出生月份
            int birthMonth = birthCalendar.get(Calendar.MONTH) + 1;
            // 获取出生日期
            int birthDay = birthCalendar.get(Calendar.DAY_OF_MONTH);

            // 先计算年份差作为初始年龄
            int age = currentYear - birthYear;
            // 如果当前月份小于出生月份,说明还未到生日,年龄减 1
            if (currentMonth < birthMonth) {
                age--;
            } else if (currentMonth == birthMonth) {
                // 如果当前月份等于出生月份,再比较日期
                if (currentDay < birthDay) {
                    // 如果当前日期小于出生日期,说明还未到生日,年龄减 1
                    age--;
                }
            }
            return age;
        } catch (ParseException e) {
            // 处理日期解析异常,打印异常信息并返回 -1 表示错误
            e.printStackTrace();
            return -1;
        }
    }
相关推荐
南尘NCA86662 小时前
企业微信防封防投诉拦截系统:从痛点解决到技术实现
java·网络·企业微信
ONE_PUNCH_Ge2 小时前
Go 语言变量
开发语言
幼稚园的山代王2 小时前
go语言了解
开发语言·后端·golang
晚风残2 小时前
【C++ Primer】第六章:函数
开发语言·c++·算法·c++ primer
满天星83035773 小时前
【C++】AVL树的模拟实现
开发语言·c++·算法·stl
怪兽20143 小时前
SQL优化手段有哪些
java·数据库·面试
weixin_456904273 小时前
基于.NET Framework 4.0的串口通信
开发语言·c#·.net
ss2733 小时前
手写MyBatis第107弹:@MapperScan原理与SqlSessionTemplate线程安全机制
java·开发语言·后端·mybatis
Deschen4 小时前
设计模式-原型模式
java·设计模式·原型模式
麦麦鸡腿堡4 小时前
Java的动态绑定机制(重要)
java·开发语言·算法