BetweenTimeUtil.java 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package com.charging.chargingparking.utils;
  2. import cn.hutool.core.date.DateUnit;
  3. import cn.hutool.core.date.DateUtil;
  4. import java.util.Calendar;
  5. import java.util.Date;
  6. /**
  7. * @author hbjzws
  8. * @date 2023/10/14 0014 上午 9:56
  9. */
  10. public class BetweenTimeUtil {
  11. public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
  12. if (nowTime.getTime() == startTime.getTime()
  13. || nowTime.getTime() == endTime.getTime()) {
  14. return true;
  15. }
  16. Calendar date = Calendar.getInstance();
  17. date.setTime(nowTime);
  18. Calendar begin = Calendar.getInstance();
  19. begin.setTime(startTime);
  20. Calendar end = Calendar.getInstance();
  21. end.setTime(endTime);
  22. if (date.after(begin) && date.before(end)) {
  23. return true;
  24. } else {
  25. return false;
  26. }
  27. }
  28. public static int dealDff(String temStartDate01,String temStartDate02,String temStartDate1,String temStartDate2){
  29. int ret =0;
  30. Date dateStart1= cn.hutool.core.date.DateUtil.parse(temStartDate01);
  31. Date dateEnd1= cn.hutool.core.date.DateUtil.parse(temStartDate02);
  32. Date dateStart2= cn.hutool.core.date.DateUtil.parse(temStartDate1);
  33. Date dateEnd2= DateUtil.parse(temStartDate2);
  34. boolean retIn =isEffectiveDate(dateStart1,dateStart2,dateEnd2);
  35. //System.out.println(retIn);
  36. boolean retOut =isEffectiveDate(dateEnd1,dateStart2,dateEnd2);
  37. // System.out.println(retOut);
  38. if(retIn&&retOut){
  39. //System.out.println("444444-全区间");
  40. ret=1;
  41. }
  42. if(!retIn&&retOut){
  43. //System.out.println("333333-右半区间");
  44. ret=2;
  45. }
  46. if(retIn&&!retOut){
  47. //System.out.println("222222-左半区间");
  48. ret=3;
  49. }
  50. if(!retIn&&!retOut){
  51. // System.out.println("11111区间外");
  52. ret=4;
  53. }
  54. return ret;
  55. }
  56. public static long getDecTimeMins(String parkingStartTime,String parkingEndTime,String memberStartTime,String memberEndTime,String memberStartT,String memberEndT){
  57. long decTimeMins=0;
  58. long hourLong =0;
  59. int ret= dealDff(parkingStartTime,parkingEndTime,memberStartTime,memberEndTime);
  60. if(ret==2){
  61. String temDate1 = DateUtil.format( DateUtil.parse(memberStartTime), "yyyy-MM-dd");
  62. String temDate3 = DateUtil.format( DateUtil.parse(parkingStartTime), "HH:mm:ss");
  63. parkingStartTime =temDate1+" "+temDate3;
  64. }
  65. if(ret==3){
  66. String temDate1 = DateUtil.format( DateUtil.parse(memberEndTime), "yyyy-MM-dd");
  67. String temDate3 = DateUtil.format( DateUtil.parse(parkingEndTime), "HH:mm:ss");
  68. parkingEndTime =temDate1+" "+temDate3;
  69. }
  70. //2是区间为1天
  71. long dayLong =DateUtil.betweenDay(DateUtil.parse(parkingStartTime), DateUtil.parse(parkingEndTime),true);
  72. dayLong =dayLong+1;
  73. if(dayLong==1){
  74. Date dateStart1= DateUtil.parse(parkingStartTime);
  75. Date dateEnd1= DateUtil.parse(parkingEndTime);
  76. String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
  77. String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd");
  78. Date dateStart31= DateUtil.parse(temDate1 + " "+memberStartT);//"2023-08-03 17:00:00"
  79. Date dateEnd31= DateUtil.parse(temDate1 + " "+memberEndT);//"2023-08-03 22:00:00"
  80. Date dateStart32= DateUtil.parse(temDate2 + " "+memberStartT);//"2023-08-04 17:00:00"
  81. Date dateEnd32= DateUtil.parse(temDate2 + " "+memberEndT);//"2023-08-04 22:00:00
  82. long llStart1= dateStart31.getTime()-dateStart1.getTime();
  83. long llEnd1= dateEnd31.getTime()-dateStart1.getTime();
  84. long llStart2= dateStart32.getTime()-dateEnd1.getTime();
  85. long llEnd2= dateEnd32.getTime()-dateEnd1.getTime();
  86. if(llStart1>0&&llEnd1>0&&llStart2>0&&llEnd2>0){
  87. decTimeMins =0;
  88. }
  89. if(llStart1>0&&llEnd1>0&&llStart2<0&&llEnd2<0){
  90. String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
  91. String temStart1 = tem1 + " "+ memberStartT;
  92. String temEnd2 = tem1 + " "+memberEndT;
  93. hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
  94. decTimeMins =hourLong*60;
  95. }
  96. if(llStart1>0&&llEnd1>0&&llStart2<0&&llEnd2>0){
  97. String tem1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
  98. String temStart1 = tem1 + " "+ memberStartT;
  99. decTimeMins =DateUtil.between(DateUtil.parse(temStart1), dateEnd1, DateUnit.MINUTE);
  100. }
  101. if(llStart1<0&&llEnd1>0&&llStart2<0&&llEnd2<0){
  102. decTimeMins =DateUtil.between(dateStart1, dateEnd31, DateUnit.MINUTE);
  103. }
  104. if(llStart1<0&&llEnd1<0&&llStart2<0&&llEnd2<0){
  105. decTimeMins =0;
  106. }
  107. }else{
  108. //3是区间为2天或以上
  109. Date dateStart1= DateUtil.parse(parkingStartTime);
  110. Date dateEnd1= DateUtil.parse(parkingEndTime);
  111. String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
  112. String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd");
  113. Date dateStart31= DateUtil.parse(temDate1 + " "+memberStartT);//"2023-08-03 17:00:00"
  114. Date dateEnd31= DateUtil.parse(temDate1 + " "+memberEndT);//"2023-08-03 22:00:00"
  115. Date dateStart32= DateUtil.parse(temDate2 + " "+memberStartT);//"2023-08-04 17:00:00"
  116. Date dateEnd32= DateUtil.parse(temDate2 + " "+memberEndT);//"2023-08-04 22:00:00"
  117. long llStart1= dateStart31.getTime()-dateStart1.getTime();
  118. long llEnd1= dateEnd31.getTime()-dateStart1.getTime();
  119. long llStart2= dateEnd1.getTime()-dateStart32.getTime();
  120. long llEnd2= dateEnd1.getTime()-dateEnd32.getTime();
  121. if(llStart1>0&&llEnd1>0&&llStart2>0&&llEnd2>0){
  122. String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
  123. String temStart1 = tem1 + " "+ memberStartT;
  124. String temEnd2 = tem1 + " "+memberEndT;
  125. hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
  126. decTimeMins =dayLong*hourLong*60;
  127. }
  128. if(llStart1>0&&llEnd1>0&&llStart2>0&&llEnd2<0){
  129. dayLong =dayLong-1;
  130. String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
  131. String temStart1 = tem1 + " "+ memberStartT;
  132. String temEnd2 = tem1 + " "+memberEndT;
  133. hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
  134. //天数减1再加上尾数
  135. decTimeMins= dayLong*hourLong*60;
  136. long minLongL=DateUtil.between(dateStart32, dateEnd1,DateUnit.MINUTE);
  137. decTimeMins =decTimeMins+minLongL;
  138. }
  139. if(llStart1<0&&llEnd1>0&&llStart2>0&&llEnd2>0){
  140. dayLong =dayLong-1;
  141. String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
  142. String temStart1 = tem1 + " "+ memberStartT;
  143. String temEnd2 = tem1 + " "+memberEndT;
  144. hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
  145. //天数减1再加上尾数
  146. decTimeMins= dayLong*hourLong*60;
  147. long minLongL=DateUtil.between(dateStart1, dateEnd31,DateUnit.MINUTE);
  148. decTimeMins =decTimeMins+minLongL;
  149. }
  150. if(llStart1>0&&llEnd1>0&&llStart2<0&&llEnd2<0){
  151. dayLong =dayLong-1;
  152. String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
  153. String temStart1 = tem1 + " "+ memberStartT;
  154. String temEnd2 = tem1 + " "+memberEndT;
  155. hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
  156. //天数减1再加上尾数
  157. decTimeMins= dayLong*hourLong*60;
  158. }
  159. if(llStart1<0&&llEnd1<0&&llStart2>0&&llEnd2>0){
  160. dayLong =dayLong-1;
  161. String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
  162. String temStart1 = tem1 + " "+ memberStartT;
  163. String temEnd2 = tem1 + " "+memberEndT;
  164. hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
  165. //天数减1再加上尾数
  166. decTimeMins= dayLong*hourLong*60;
  167. }
  168. if(llStart1<0&&llEnd1>0&&llStart2<0&&llEnd2<0){
  169. decTimeMins=0;
  170. long minLongL=DateUtil.between(dateStart1, dateEnd31,DateUnit.MINUTE);
  171. decTimeMins =decTimeMins+minLongL;
  172. }
  173. if(llStart1<0&&llEnd1<0&&llStart2>0&&llEnd2<0){
  174. decTimeMins= 0;
  175. long minLongL=DateUtil.between(dateStart32, dateEnd1,DateUnit.MINUTE);
  176. decTimeMins =decTimeMins+minLongL;
  177. }
  178. }
  179. System.out.println("减免时长(分钟):"+decTimeMins);
  180. return decTimeMins;
  181. }
  182. }