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;
        }
    }
相关推荐
Cloud_.4 分钟前
Apifox Helper 自动生成API接口文档
java·ide·intellij-idea
dorabighead2 小时前
重构版:JavaScript 的 new 操作符——从“黑箱仪式”到“亲手造物”的认知跃迁
开发语言·javascript·重构
知识浅谈2 小时前
@Validate 注解的使用-分组案例很有用
java·springboot
Humbunklung2 小时前
C#中通过Response.Headers设置自定义参数
开发语言·c#
Trouvaille ~2 小时前
【Java篇】一法不变,万象归一:方法封装与递归的思想之道
java·开发语言·面向对象·javase·递归·方法·基础入门
Zhava2 小时前
MybatisPlus中的customSqlSegment动态拼接where条件
java·mybatis
极客先躯2 小时前
高级java每日一道面试题-2025年2月26日-框架篇[Mybatis篇]-Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式 ?
java·mybatis·嵌套映射·resulttype属性·resultmap属性·results注解·列名别名
wtrees_松阳2 小时前
【编程向导】-JavaScript-基础语法-类型检测
开发语言·javascript·原型模式
qq_529835353 小时前
Java实现死锁
java·开发语言·python
knightkkzboy3 小时前
《C语言中的“三元精灵”:条件操作符的魔法与奥秘》
c语言·开发语言