From 9b39254d11652e4197f007f7afa8ab42bedefb83 Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期二, 27 二月 2024 16:25:42 +0800
Subject: [PATCH] 优化算费bug
---
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java | 175 ++++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 115 insertions(+), 60 deletions(-)
diff --git a/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java b/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
index 8e7a3f7..f6ef10d 100755
--- a/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
+++ b/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
@@ -829,6 +829,61 @@
return false;
}
+ public static double dayCompare(Date fromDate, Date toDate) {
+ double resMonth = 0.0;
+ Calendar from = Calendar.getInstance();
+ from.setTime(fromDate);
+ Calendar to = Calendar.getInstance();
+ to.setTime(toDate);
+ //姣旇緝鏈堜唤宸� 鍙兘鏈夋暣鏁� 涔熶細璐熸暟
+ int result = to.get(Calendar.MONTH) - from.get(Calendar.MONTH);
+ //姣旇緝骞村樊
+ int month = (to.get(Calendar.YEAR) - from.get(Calendar.YEAR)) * 12;
+
+ //鐪熷疄 鐩稿樊鏈堜唤
+ result = result + month;
+
+ //寮�濮嬫椂闂� 2021-06-01 2021-08-05 result = 2 2021-08-01
+ Calendar newFrom = Calendar.getInstance();
+ newFrom.setTime(fromDate);
+ newFrom.add(Calendar.MONTH, result);
+ //濡傛灉鍔犳湀浠藉悗 澶т簬浜嗗綋鍓嶆椂闂� 榛樿鍔� 鏈堜唤 -1 鎯呭喌 12-19 21-01-10
+ //杩欎釜鏄鐨勯�昏緫涓�瀹氬ソ濂界悊瑙�
+ if (newFrom.getTime().getTime() > toDate.getTime()) {
+ newFrom.setTime(fromDate);
+ result = result - 1;
+ newFrom.add(Calendar.MONTH, result);
+ }
+
+ // t1 2021-08-01 t2 2021-08-05
+ long t1 = newFrom.getTime().getTime();
+ long t2 = to.getTime().getTime();
+ //鐩稿樊姣
+ double days = (t2 - t1) * 1.00 / (24 * 60 * 60 * 1000);
+ BigDecimal tmpDays = new BigDecimal(days); //鐩稿樊澶╂暟
+ BigDecimal monthDay = null;
+ Calendar newFromMaxDay = Calendar.getInstance();
+ newFromMaxDay.set(newFrom.get(Calendar.YEAR), newFrom.get(Calendar.MONTH), 1, 0, 0, 0);
+ newFromMaxDay.add(Calendar.MONTH, 1); //涓嬩釜鏈�1鍙�
+ //鍦ㄥ綋鍓嶆湀涓� 杩欏潡鏈夐棶棰�
+ if (toDate.getTime() < newFromMaxDay.getTime().getTime()) {
+ monthDay = new BigDecimal(newFrom.getActualMaximum(Calendar.DAY_OF_MONTH));
+ return tmpDays.divide(monthDay, 4, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(result)).doubleValue();
+ }
+ // 涓婃湀澶╂暟
+ days = (newFromMaxDay.getTimeInMillis() - t1) * 1.00 / (24 * 60 * 60 * 1000);
+ tmpDays = new BigDecimal(days);
+ monthDay = new BigDecimal(newFrom.getActualMaximum(Calendar.DAY_OF_MONTH));
+ BigDecimal preRresMonth = tmpDays.divide(monthDay, 4, BigDecimal.ROUND_HALF_UP);
+
+ //涓嬫湀澶╂暟
+ days = (t2 - newFromMaxDay.getTimeInMillis()) * 1.00 / (24 * 60 * 60 * 1000);
+ tmpDays = new BigDecimal(days);
+ monthDay = new BigDecimal(newFromMaxDay.getActualMaximum(Calendar.DAY_OF_MONTH));
+ resMonth = tmpDays.divide(monthDay, 4, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(result)).add(preRresMonth).doubleValue();
+ return resMonth;
+ }
+
/**
* 璁$畻 fromDate 2023-01-12 toDate 2023-09-15
* 2023-01-12--->2023-01-01 ---> 2023-09-01 ------> 2023-09-15
@@ -838,66 +893,66 @@
* @param toDate
* @return
*/
- public static double dayCompare(Date fromDate, Date toDate) {
-
-
- //todo 闇�瑕佽绠椾笁绔椂闂� 鐩稿姞鍗冲彲
- Date fromDateFirstDate = fromDate; // 绗竴涓�1鏃�
-
- Date toDateFirstDate = toDate; // 鏈�鍚庝竴涓�1鏃�
-
- boolean firstDay = true;
-
- //todo 1.0 璁$畻 fromDateFirstDate
- Calendar fromDateCal = Calendar.getInstance();
- fromDateCal.setTime(fromDate);
- fromDateCal.set(Calendar.DAY_OF_MONTH, 1);
- if (fromDate.getTime() > fromDateCal.getTime().getTime()) {
- fromDateCal.add(Calendar.MONTH, 1);
- firstDay = false;
- fromDateFirstDate = fromDateCal.getTime();
- }
-
- //todo 2.0 璁$畻 toDateFirstDate
- Calendar toDateCal = Calendar.getInstance();
- toDateCal.setTime(toDate);
- toDateCal.set(Calendar.DAY_OF_MONTH, 1);
- if (toDate.getTime() > toDateCal.getTime().getTime()) {
- toDateFirstDate = toDateCal.getTime();
- }
-
- // todo 3.0 璁$畻鏁存暟鏈� fromDateFirstDate ---> toDateFirstDate
- Calendar from = Calendar.getInstance();
- from.setTime(fromDateFirstDate);
- Calendar to = Calendar.getInstance();
- to.setTime(toDateFirstDate);
- //姣旇緝鏈堜唤宸� 鍙兘鏈夋暣鏁� 涔熶細璐熸暟
- int result = to.get(Calendar.MONTH) - from.get(Calendar.MONTH);
- //姣旇緝骞村樊
- int month = (to.get(Calendar.YEAR) - from.get(Calendar.YEAR)) * 12;
- //鐪熷疄 鐩稿樊鏈堜唤
- result = result + month;
-
- //todo 3.1 濡傛灉 fromDate 鍜宼oDate 鏄悓涓�澶� 鍒欑洿鎺ヨ繑鍥炴暣鏈堬紝涓嶅啀璁$畻 4.0 鍜�5.0
- if (DateUtil.sameMonthDay(fromDate, toDate)) {
- return firstDay ? result : result + 1;
- }
-
- // todo 4.0 璁$畻 fromDate ---> fromDateFirstDate 鐨勬湀浠�
- double days = (fromDateFirstDate.getTime() - fromDate.getTime()) * 1.00 / (24 * 60 * 60 * 1000);
- BigDecimal tmpDays = new BigDecimal(days); //鐩稿樊澶╂暟
- BigDecimal monthDay = new BigDecimal(DateUtil.getMonthDay(fromDate));
- BigDecimal resMonth = tmpDays.divide(monthDay, 4, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(result));
-
- // todo 5.0 璁$畻 toDateFirstDate ----> toDate 鏈堜唤
- days = (toDate.getTime() - toDateFirstDate.getTime()) * 1.00 / (24 * 60 * 60 * 1000);
- tmpDays = new BigDecimal(days); //鐩稿樊澶╂暟
- monthDay = new BigDecimal(DateUtil.getMonthDay(toDate));
- resMonth = tmpDays.divide(monthDay, 4, BigDecimal.ROUND_HALF_UP).add(resMonth);
-
- return resMonth.doubleValue();
-
- }
+// public static double dayCompare(Date fromDate, Date toDate) {
+//
+//
+// //todo 闇�瑕佽绠椾笁绔椂闂� 鐩稿姞鍗冲彲
+// Date fromDateFirstDate = fromDate; // 绗竴涓�1鏃�
+//
+// Date toDateFirstDate = toDate; // 鏈�鍚庝竴涓�1鏃�
+//
+// boolean firstDay = true;
+//
+// //todo 1.0 璁$畻 fromDateFirstDate
+// Calendar fromDateCal = Calendar.getInstance();
+// fromDateCal.setTime(fromDate);
+// fromDateCal.set(Calendar.DAY_OF_MONTH, 1);
+// if (fromDate.getTime() > fromDateCal.getTime().getTime()) {
+// fromDateCal.add(Calendar.MONTH, 1);
+// firstDay = false;
+// fromDateFirstDate = fromDateCal.getTime();
+// }
+//
+// //todo 2.0 璁$畻 toDateFirstDate
+// Calendar toDateCal = Calendar.getInstance();
+// toDateCal.setTime(toDate);
+// toDateCal.set(Calendar.DAY_OF_MONTH, 1);
+// if (toDate.getTime() > toDateCal.getTime().getTime()) {
+// toDateFirstDate = toDateCal.getTime();
+// }
+//
+// // todo 3.0 璁$畻鏁存暟鏈� fromDateFirstDate ---> toDateFirstDate
+// Calendar from = Calendar.getInstance();
+// from.setTime(fromDateFirstDate);
+// Calendar to = Calendar.getInstance();
+// to.setTime(toDateFirstDate);
+// //姣旇緝鏈堜唤宸� 鍙兘鏈夋暣鏁� 涔熶細璐熸暟
+// int result = to.get(Calendar.MONTH) - from.get(Calendar.MONTH);
+// //姣旇緝骞村樊
+// int month = (to.get(Calendar.YEAR) - from.get(Calendar.YEAR)) * 12;
+// //鐪熷疄 鐩稿樊鏈堜唤
+// result = result + month;
+//
+// //todo 3.1 濡傛灉 fromDate 鍜宼oDate 鏄悓涓�澶� 鍒欑洿鎺ヨ繑鍥炴暣鏈堬紝涓嶅啀璁$畻 4.0 鍜�5.0
+// if (DateUtil.sameMonthDay(fromDate, toDate)) {
+// return firstDay ? result : result + 1;
+// }
+//
+// // todo 4.0 璁$畻 fromDate ---> fromDateFirstDate 鐨勬湀浠�
+// double days = (fromDateFirstDate.getTime() - fromDate.getTime()) * 1.00 / (24 * 60 * 60 * 1000);
+// BigDecimal tmpDays = new BigDecimal(days); //鐩稿樊澶╂暟
+// BigDecimal monthDay = new BigDecimal(DateUtil.getMonthDay(fromDate));
+// BigDecimal resMonth = tmpDays.divide(monthDay, 4, BigDecimal.ROUND_HALF_UP).add(new BigDecimal(result));
+//
+// // todo 5.0 璁$畻 toDateFirstDate ----> toDate 鏈堜唤
+// days = (toDate.getTime() - toDateFirstDate.getTime()) * 1.00 / (24 * 60 * 60 * 1000);
+// tmpDays = new BigDecimal(days); //鐩稿樊澶╂暟
+// monthDay = new BigDecimal(DateUtil.getMonthDay(toDate));
+// resMonth = tmpDays.divide(monthDay, 4, BigDecimal.ROUND_HALF_UP).add(resMonth);
+//
+// return resMonth.doubleValue();
+//
+// }
public static Date getTargetEndTime(double month, Date startDate) {
Calendar endDate = Calendar.getInstance();
--
Gitblit v1.8.0