| | |
| | | */ |
| | | public static DateCompare dayCompare(Date fromDate,Date toDate,Date freeStart,Date freeEnd){ |
| | | //开始时间往后延伸,除去有效时期 |
| | | fromDate = DateUtil.addDaysToDate(fromDate,getIntersectingDays(fromDate,toDate,freeStart,freeEnd)); |
| | | if(toDate.getTime()<= fromDate.getTime()){ |
| | | fromDate = DateUtil.addDaysToDate(fromDate,getIntersectingDays(fromDate,DateUtil.addDaysToDate(toDate,1),freeStart,DateUtil.addDaysToDate(freeEnd,1))); |
| | | if(toDate.getTime()< fromDate.getTime()){ |
| | | return DateCompare.builder().day(0).month(0).year(0).yearFloat(new BigDecimal(0)).monthFloat(new BigDecimal(0)).build(); |
| | | } |
| | | toDate = DateUtil.addDaysToDate(toDate,1);//包含截止日期 |
| | | Calendar from = Calendar.getInstance(); |
| | | from.setTime(fromDate); |
| | | Calendar to = Calendar.getInstance(); |
| | |
| | | |
| | | int year = toYear - fromYear; |
| | | int month = toYear * 12 + toMonth - (fromYear * 12 + fromMonth); |
| | | int day = (int) ((to.getTimeInMillis() - from.getTimeInMillis()) / (24 * 3600 * 1000)); |
| | | int day = DateUtil.daysBetweenDates( toDate,fromDate); |
| | | BigDecimal yearFloat = new BigDecimal(year) ; |
| | | BigDecimal monthFloat = new BigDecimal(month) ; |
| | | |
| | | int yearDays = day - DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate) ; |
| | | if(yearDays>0){ |
| | | yearFloat = yearFloat.add(new BigDecimal(yearDays).divide(new BigDecimal(365), 2,RoundingMode.FLOOR)); |
| | | int yearDays = day - (DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate)+1); |
| | | if(yearDays!=0){ |
| | | if(yearDays <0){ |
| | | year = year-1; |
| | | yearFloat = new BigDecimal(year) ; |
| | | yearDays =DateUtil.daysBetweenDates(toDate,DateUtil.addYearToDate(fromDate,year)); |
| | | } |
| | | yearFloat = yearFloat.add(new BigDecimal(1.0*yearDays).divide(new BigDecimal(365.0), 15,RoundingMode.HALF_UP)); |
| | | } |
| | | int monthDays = day - DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate) ; |
| | | if(monthDays>0){ |
| | | monthFloat = monthFloat.add(new BigDecimal(monthDays).divide(new BigDecimal(30), 2,RoundingMode.FLOOR)); |
| | | int monthDays = day - (DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate)+1) ; |
| | | if(monthDays!=0){ |
| | | if(monthDays <0){ |
| | | month = month-1; |
| | | monthFloat = new BigDecimal(month) ; |
| | | monthDays =DateUtil.daysBetweenDates(toDate,DateUtil.addMonthToDate(fromDate,month)); |
| | | } |
| | | monthFloat = monthFloat.add(new BigDecimal(1.0*monthDays*12).divide(new BigDecimal(365.0), 15,RoundingMode.HALF_UP)); |
| | | } |
| | | return DateCompare.builder().day(day).month(month).year(year).yearFloat(yearFloat).monthFloat(monthFloat).yearDays(yearDays).monthDays(monthDays).build(); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | DateCompare dateCompare = DateCompare.monthYearCompare(DateUtil.getDateFromString("2024-12-02 00:00:00"),DateUtil.getDateByString("2025-01-02 00:00:00") ); |
| | | System.out.println(dateCompare.day); |
| | | System.out.println(dateCompare.monthDays); |
| | | System.out.println(dateCompare.month); |
| | | System.out.println(dateCompare.monthFloat); |
| | | System.out.println("=========year============="); |
| | | System.out.println(dateCompare.yearDays); |
| | | System.out.println(dateCompare.year); |
| | | System.out.println(dateCompare.yearFloat); |
| | | } |
| | | public static DateCompare monthYearCompare(Date fromDate,Date toDate ){ |
| | | //开始时间往后延伸,除去有效时期 |
| | | toDate =DateUtil.addDaysToDate(toDate, 1); |
| | | Calendar from = Calendar.getInstance(); |
| | | from.setTime(fromDate); |
| | | Calendar to = Calendar.getInstance(); |
| | |
| | | BigDecimal yearFloat = new BigDecimal(year) ; |
| | | BigDecimal monthFloat = new BigDecimal(month) ; |
| | | |
| | | int yearDays = day - DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate) ; |
| | | if(yearDays>0){ |
| | | yearFloat = yearFloat.add(new BigDecimal(yearDays).divide(new BigDecimal(365), 2,RoundingMode.FLOOR)); |
| | | int yearDays = day - (DateUtil.daysBetweenDates(DateUtil.addYearToDate(fromDate,year),fromDate)+1); |
| | | if(yearDays!=0){ |
| | | if(yearDays <0){ |
| | | year = year-1; |
| | | yearFloat = new BigDecimal(year) ; |
| | | yearDays =DateUtil.daysBetweenDates(toDate,DateUtil.addYearToDate(fromDate,year)); |
| | | } |
| | | yearFloat = yearFloat.add(new BigDecimal(1.0*yearDays).divide(new BigDecimal(365.0), 15,RoundingMode.HALF_UP)); |
| | | } |
| | | int monthDays = day - DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate) ; |
| | | if(monthDays>0){ |
| | | monthFloat = monthFloat.add(new BigDecimal(monthDays).divide(new BigDecimal(30), 2,RoundingMode.FLOOR)); |
| | | int monthDays = day - (DateUtil.daysBetweenDates(DateUtil.addMonthToDate(fromDate,month),fromDate)+1) ; |
| | | if(monthDays!=0){ |
| | | if(monthDays <0){ |
| | | month = month-1; |
| | | monthFloat = new BigDecimal(month) ; |
| | | monthDays =DateUtil.daysBetweenDates(toDate,DateUtil.addMonthToDate(fromDate,month)); |
| | | } |
| | | monthFloat = monthFloat.add(new BigDecimal(1.0*monthDays*12).divide(new BigDecimal(365.0), 15,RoundingMode.HALF_UP)); |
| | | } |
| | | return DateCompare.builder().day(day).month(month).year(year).yearFloat(yearFloat).monthFloat(monthFloat).yearDays(yearDays).monthDays(monthDays).build(); |
| | | } |
| | |
| | | Date earlierStart = DateUtil.daysBetweenDates(start1,start2)>0? start1 : start2; |
| | | Date laterEnd = DateUtil.daysBetweenDates(end2,end1)>0 ? end1 : end2; |
| | | |
| | | int days =DateUtil.daysBetweenDates(laterEnd,earlierStart ); |
| | | int days =DateUtil.daysBetweenDates(laterEnd,earlierStart); |
| | | return days>0?days:0 ; |
| | | } |
| | | |