日历月转日,日历年转日历日

[复制链接]
发表于 2025-7-7 09:32:32 | 显示全部楼层 |阅读模式

日历月 转日历日;日历年转日历日,入参可为小数

//日历月-日历日  从构型数据入库时间起算
    private static BigDecimal calMonthToDay(LocalDateTime date ,BigDecimal fkConfigVal){
        LocalDate d1 = date.toLocalDate();

        double monthsToOffset = fkConfigVal.doubleValue();

        // 分解整数和小数部分
        int intMonthPart = -(int) Math.floor(monthsToOffset);
        //小数部份
        double floatMonthPart = monthsToOffset + intMonthPart;

        //整数月
        LocalDate monthD = d1.plusMonths(intMonthPart);
        // 获取当前月的总天数
        int totalDaysInMonth = monthD.lengthOfMonth();
        // 计算需要加的天数(按当前月实际天数)
        int daysToOffset = -(int) Math.round(floatMonthPart * totalDaysInMonth);
        // 偏移小数部份月份(整数的天数)
        LocalDate d2 = monthD.plusDays(daysToOffset);
        // 间隔日历日
        long daysBetween = Math.abs(ChronoUnit.DAYS.between(d2, d1));
        return new BigDecimal(daysBetween);
    }
    private static BigDecimal calYearToDay(LocalDateTime date ,BigDecimal fkConfigVal){
        //年转月
        BigDecimal monthval = new BigDecimal(fkConfigVal.doubleValue() * 12);
        //月转日历日
        BigDecimal days = calMonthToDay(date, monthval);
        return days;
    }

GMT+8, 2025-9-5 18:23 , Processed in 0.091737 second(s), 35 queries Archiver|手机版|小黑屋|Attic ( 京ICP备2020048627号 )

快速回复 返回顶部 返回列表