package com.charging.chargingparking.utils; import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import java.util.Calendar; import java.util.Date; /** * @author hbjzws * @date 2023/10/14 0014 上午 9:56 */ public class BetweenTimeUtil { public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) { if (nowTime.getTime() == startTime.getTime() || nowTime.getTime() == endTime.getTime()) { return true; } Calendar date = Calendar.getInstance(); date.setTime(nowTime); Calendar begin = Calendar.getInstance(); begin.setTime(startTime); Calendar end = Calendar.getInstance(); end.setTime(endTime); if (date.after(begin) && date.before(end)) { return true; } else { return false; } } public static int dealDff(String temStartDate01,String temStartDate02,String temStartDate1,String temStartDate2){ int ret =0; Date dateStart1= cn.hutool.core.date.DateUtil.parse(temStartDate01); Date dateEnd1= cn.hutool.core.date.DateUtil.parse(temStartDate02); Date dateStart2= cn.hutool.core.date.DateUtil.parse(temStartDate1); Date dateEnd2= DateUtil.parse(temStartDate2); boolean retIn =isEffectiveDate(dateStart1,dateStart2,dateEnd2); //System.out.println(retIn); boolean retOut =isEffectiveDate(dateEnd1,dateStart2,dateEnd2); // System.out.println(retOut); if(retIn&&retOut){ //System.out.println("444444-全区间"); ret=1; } if(!retIn&&retOut){ //System.out.println("333333-右半区间"); ret=2; } if(retIn&&!retOut){ //System.out.println("222222-左半区间"); ret=3; } if(!retIn&&!retOut){ // System.out.println("11111区间外"); ret=4; } return ret; } public static long getDecTimeMins(String parkingStartTime,String parkingEndTime,String memberStartTime,String memberEndTime,String memberStartT,String memberEndT){ long decTimeMins=0; long hourLong =0; int ret= dealDff(parkingStartTime,parkingEndTime,memberStartTime,memberEndTime); if(ret==2){ String temDate1 = DateUtil.format( DateUtil.parse(memberStartTime), "yyyy-MM-dd"); String temDate3 = DateUtil.format( DateUtil.parse(parkingStartTime), "HH:mm:ss"); parkingStartTime =temDate1+" "+temDate3; } if(ret==3){ String temDate1 = DateUtil.format( DateUtil.parse(memberEndTime), "yyyy-MM-dd"); String temDate3 = DateUtil.format( DateUtil.parse(parkingEndTime), "HH:mm:ss"); parkingEndTime =temDate1+" "+temDate3; } //2是区间为1天 long dayLong =DateUtil.betweenDay(DateUtil.parse(parkingStartTime), DateUtil.parse(parkingEndTime),true); dayLong =dayLong+1; if(dayLong==1){ Date dateStart1= DateUtil.parse(parkingStartTime); Date dateEnd1= DateUtil.parse(parkingEndTime); String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd"); String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd"); Date dateStart31= DateUtil.parse(temDate1 + " "+memberStartT);//"2023-08-03 17:00:00" Date dateEnd31= DateUtil.parse(temDate1 + " "+memberEndT);//"2023-08-03 22:00:00" Date dateStart32= DateUtil.parse(temDate2 + " "+memberStartT);//"2023-08-04 17:00:00" Date dateEnd32= DateUtil.parse(temDate2 + " "+memberEndT);//"2023-08-04 22:00:00 long llStart1= dateStart31.getTime()-dateStart1.getTime(); long llEnd1= dateEnd31.getTime()-dateStart1.getTime(); long llStart2= dateStart32.getTime()-dateEnd1.getTime(); long llEnd2= dateEnd32.getTime()-dateEnd1.getTime(); if(llStart1>0&&llEnd1>0&&llStart2>0&&llEnd2>0){ decTimeMins =0; } if(llStart1>0&&llEnd1>0&&llStart2<0&&llEnd2<0){ String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd"); String temStart1 = tem1 + " "+ memberStartT; String temEnd2 = tem1 + " "+memberEndT; hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR); decTimeMins =hourLong*60; } if(llStart1>0&&llEnd1>0&&llStart2<0&&llEnd2>0){ String tem1 = DateUtil.format(dateStart1, "yyyy-MM-dd"); String temStart1 = tem1 + " "+ memberStartT; decTimeMins =DateUtil.between(DateUtil.parse(temStart1), dateEnd1, DateUnit.MINUTE); } if(llStart1<0&&llEnd1>0&&llStart2<0&&llEnd2<0){ decTimeMins =DateUtil.between(dateStart1, dateEnd31, DateUnit.MINUTE); } if(llStart1<0&&llEnd1<0&&llStart2<0&&llEnd2<0){ decTimeMins =0; } }else{ //3是区间为2天或以上 Date dateStart1= DateUtil.parse(parkingStartTime); Date dateEnd1= DateUtil.parse(parkingEndTime); String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd"); String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd"); Date dateStart31= DateUtil.parse(temDate1 + " "+memberStartT);//"2023-08-03 17:00:00" Date dateEnd31= DateUtil.parse(temDate1 + " "+memberEndT);//"2023-08-03 22:00:00" Date dateStart32= DateUtil.parse(temDate2 + " "+memberStartT);//"2023-08-04 17:00:00" Date dateEnd32= DateUtil.parse(temDate2 + " "+memberEndT);//"2023-08-04 22:00:00" long llStart1= dateStart31.getTime()-dateStart1.getTime(); long llEnd1= dateEnd31.getTime()-dateStart1.getTime(); long llStart2= dateEnd1.getTime()-dateStart32.getTime(); long llEnd2= dateEnd1.getTime()-dateEnd32.getTime(); if(llStart1>0&&llEnd1>0&&llStart2>0&&llEnd2>0){ String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd"); String temStart1 = tem1 + " "+ memberStartT; String temEnd2 = tem1 + " "+memberEndT; hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR); decTimeMins =dayLong*hourLong*60; } if(llStart1>0&&llEnd1>0&&llStart2>0&&llEnd2<0){ dayLong =dayLong-1; String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd"); String temStart1 = tem1 + " "+ memberStartT; String temEnd2 = tem1 + " "+memberEndT; hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR); //天数减1再加上尾数 decTimeMins= dayLong*hourLong*60; long minLongL=DateUtil.between(dateStart32, dateEnd1,DateUnit.MINUTE); decTimeMins =decTimeMins+minLongL; } if(llStart1<0&&llEnd1>0&&llStart2>0&&llEnd2>0){ dayLong =dayLong-1; String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd"); String temStart1 = tem1 + " "+ memberStartT; String temEnd2 = tem1 + " "+memberEndT; hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR); //天数减1再加上尾数 decTimeMins= dayLong*hourLong*60; long minLongL=DateUtil.between(dateStart1, dateEnd31,DateUnit.MINUTE); decTimeMins =decTimeMins+minLongL; } if(llStart1>0&&llEnd1>0&&llStart2<0&&llEnd2<0){ dayLong =dayLong-1; String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd"); String temStart1 = tem1 + " "+ memberStartT; String temEnd2 = tem1 + " "+memberEndT; hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR); //天数减1再加上尾数 decTimeMins= dayLong*hourLong*60; } if(llStart1<0&&llEnd1<0&&llStart2>0&&llEnd2>0){ dayLong =dayLong-1; String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd"); String temStart1 = tem1 + " "+ memberStartT; String temEnd2 = tem1 + " "+memberEndT; hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR); //天数减1再加上尾数 decTimeMins= dayLong*hourLong*60; } if(llStart1<0&&llEnd1>0&&llStart2<0&&llEnd2<0){ decTimeMins=0; long minLongL=DateUtil.between(dateStart1, dateEnd31,DateUnit.MINUTE); decTimeMins =decTimeMins+minLongL; } if(llStart1<0&&llEnd1<0&&llStart2>0&&llEnd2<0){ decTimeMins= 0; long minLongL=DateUtil.between(dateStart32, dateEnd1,DateUnit.MINUTE); decTimeMins =decTimeMins+minLongL; } } System.out.println("减免时长(分钟):"+decTimeMins); return decTimeMins; } }