JAVA计算两个日期相差多少年多少天

/**
     * 两个日期相差多少年多少天
     * @param targetDate 目标日期 不能为null
     * @param compareDate 比较日期 不能为null
     * @return 相差年与天,返回绝对值或null,格式是28.096代表28年96天。
     */
    public static Float age(LocalDate targetDate,LocalDate compareDate){
        try {
            if (compareDate == null) {
                return null;
            }
            if (targetDate == null) {
                return null;
            }
            int nyear = targetDate.getYear();
            int nm = targetDate.getMonthValue();
            int nd = targetDate.getDayOfMonth();

            int byear = compareDate.getYear();
            int bm = compareDate.getMonthValue();
            int bd = compareDate.getDayOfMonth();

            int year = nyear - byear;
            /*
             * 这段是处理两个日期相差多少年
             * 1、当前年份减去出生年份,比较当前月份是否小于出生月份,如果小于的话相差年数需要减1
             * 2、如果当前月份大于等于目标月份比较当月天,当前天数小于出生天相差年数减1
             */
            if (nm < bm) {
                year = year - 1;
            } else if (nm == bm) {
                if (nd < bd) {
                    year = year - 1;
                }
            }
            compareDate = compareDate.plusYears(year);
            float day = targetDate.toEpochDay() - compareDate.toEpochDay();
            day = day / 1000;//天数后移三位
            return Math.abs(year + day);//取绝对值
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值