根据出生年月日计算出生了多少年,多少月,多少天

根据出生年月日计算出生了多少年,多少月,多少天

1,定义一个方法获得出生日期的Date类型时间

/**
     * // 格式化字符串类型的时间
     * @param birthday
     * @return
     * @throws ParseException
     */
    public static Date getDateFormat(String birthday) throws ParseException {
        // 格式化字符串类型的时间
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        // 得到Date类型的时间
        Date parse = simpleDateFormat.parse(birthday);
        return parse;
    }

2,根据出生的时间Date和当前时间Date来计算出生了多少年,多少月,多少天

/**
     * 根据出生时间Date和当前时间Date来计算出生年月日
     * @param birthday
     * @throws ParseException
     */
    public static void getAge(String birthday) throws ParseException {
        // 格式化传入的字符串类型的时间,转为Date类型对象
        Date dateFormat = getDateFormat(birthday);
        // 得到时间戳
        long birTime = dateFormat.getTime();
        // 创建Calendar来获取当前的时间,及其时间戳
        Calendar calendar = Calendar.getInstance();
        Date date = calendar.getTime();
        long nowTime = date.getTime();
        // 参与计算的当前时间必须大于出生日期才可以计算
        if (nowTime < birTime) { // 出生时间在当前时间之后,报错,无法计算
            throw new IllegalArgumentException(
                    "对比的出生时间晚于当前的时间,无法进行比较!"
            );
        }

        // 获取当前 年 月 日
        int nowYear = calendar.get(Calendar.YEAR);
        int nowMon = calendar.get(Calendar.MONDAY) + 1; // 月份从0开始 所以+1
        int nowDay = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println("当前 年 月 日:"+nowYear + " " + nowMon + " " + nowDay);

        // 创建Calendar来存出生年 月 日
        Calendar calendar2 = Calendar.getInstance();
        // 将出生日期时间戳存入calendar 得到出生时的年 月 日
        calendar2.setTime(dateFormat);
        // 获取出生时 年 月 日
        int birYear = calendar2.get(Calendar.YEAR);
        int birMon = calendar2.get(Calendar.MONDAY) + 1; // 月份从0开始 所以+1
        int birDay = calendar2.get(Calendar.DAY_OF_MONTH);
        System.out.println("出生时的年 月 日:"+birYear + " " + birMon + " " + birDay);

        // 计算出生至今的 年龄/月份/天数
        int age = nowYear - birYear; // 获得年龄
        int mon = 0;
        int day = 0;
        if (nowMon >= birMon) { // 当前月份大于出生时月份
            mon = nowMon - birMon; // 获得出生月份
            if (nowDay >= birDay) {  // 当天大于等于出生那天
                day = nowDay - birDay; // 直接获得出生天数
            } else { // 当天小于出生那天
                mon = mon - 1; // 月份减少1
                day = birDay - nowDay; // 天数差
                int maximum = calendar.getActualMaximum(Calendar.DATE); // 当前月天数
                day = maximum - day; // 获得出生天数
            }
        } else { // 当前月份小于出生时月份
            age = age - 1;// 当前月份小于出生时月份   年龄减 1
            mon = 12 - (birMon - nowMon); // 获得出生月份
            if (nowDay >= birDay) { // 当天大于等于出生那天
                day = nowDay - birDay; // 直接获得出生天数
            } else { // 当天小于出生那天
                mon = mon - 1; // 月份-1
                day = birDay - nowDay; // 天数差
                int maximum = calendar.getActualMaximum(Calendar.DATE); // 当前月天数
                day = maximum - day; // 获得出生天数
            }
        }
        System.out.println("出生日期:" + birYear + " " + birMon + " " + birDay);
        System.out.println(age + "岁 " + mon + "月 " + day + "天");
    }

测试

public static void main(String[] args) throws ParseException {
        String birthday = "2000-9-31";
        getAge(birthday); // 查询结果 20岁 10月 20天

    }
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值