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;
        }
    }
相关推荐
编程大师哥2 分钟前
vxe-table 透视表分组汇总及排序基础配置
java
全栈师7 分钟前
C#中控制权限的逻辑写法
开发语言·c#
8***848216 分钟前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
9***J62818 分钟前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
S***q19226 分钟前
Rust在系统工具中的内存安全给代码上了三道保险锁。但正是这种“编译期的严苛”,换来了运行时的安心。比如这段代码:
开发语言·后端·rust
M***Z21029 分钟前
SQL 建表语句详解
java·数据库·sql
v***79430 分钟前
Spring Boot 热部署
java·spring boot·后端
执笔论英雄30 分钟前
【RL】python协程
java·网络·人工智能·python·设计模式
打点计时器33 分钟前
matlab 解决wfdb工具使用本地数据集报错
开发语言·matlab
zmzb010338 分钟前
C++课后习题训练记录Day38
开发语言·c++