当前位置: 首页 > news >正文

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;
        }
    }
http://www.dtcms.com/a/67528.html

相关文章:

  • 【CXX】6.1 String — rust::String
  • 鸿蒙app 开发 高效的 存储 数据 推荐使用 @tencent/mmkv(V2.1.0):
  • JavaScript语言的区块链隐私
  • 【经验分享】SpringBoot集成Websocket开发 之 使用由 Jakarta EE 规范提供的 API开发
  • READ-COMMITTED事务隔离级别下的先插后查问题记录
  • 谷歌Gemini 2.0 Flash放出原生多模态图像生成功能:支持多轮对话式实时编辑,附最新尝鲜方式
  • 【算法】DFS、BFS、拓扑排序
  • Unity引擎架构介绍及代码示例
  • 网络安全设备系统集成方案 系统集成和网络安全
  • petalinux环境下给linux-xlnx源码打补丁
  • 重学vue3:vue3组件通信的几种方法
  • OpenAI新工具助力开发者:AI智能体自动任务创建的艺术
  • 基于DeepSeek的智能数据分析和自动化处理系统:引领BI行业新变革
  • redis的持久化
  • 详解 C++ 左值和右值对象 左值引用和右值引用
  • RabbitMQ报错:Shutdown Signal channel error; protocol method
  • 微信小程序-实现锚点跳转,页面加载后自动跳转、点击跳转到指定位置
  • ubuntu 设置允许root远程登录
  • c语言笔记 静态函数和递归函数
  • 基于PyTorch通信算子的分布式训练阻塞定位方法
  • emacs使用mongosh的方便工具发布
  • 为什么 JPA 可以通过 findByNameContaining 自动生成 SQL 语句?
  • The First项目报告:重塑 DeFi 流动性的革新者,ELX 即将登陆 The First
  • Vue 系列之:路由
  • 玩转python:通俗易懂掌握高级数据结构:collections模块之namedtuple
  • 【附JS、Python、C++题解】Leetcode面试150题(9)——三数之和
  • C语言基础知识04
  • 2025-03-10 学习记录--C/C++-PTA 习题11-4 字符串的连接
  • Mysql_DML
  • java中如何把json转化的字符串再转化成json格式