日历月 转日历日;日历年转日历日,入参可为小数
//日历月-日历日 从构型数据入库时间起算
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;
}