123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- 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;
- }
- }
|