From b5c4d5b884a996002197987c07f90a6c8d7720f2 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期二, 10 十二月 2024 10:45:29 +0800
Subject: [PATCH] ll
---
server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java | 80 ++++++++++++++++++++++++++++++----------
1 files changed, 60 insertions(+), 20 deletions(-)
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java b/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java
index 1335d95..df82f83 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/DateCompare.java
@@ -39,16 +39,20 @@
* 浠ュ勾涓哄崟浣嶇浉宸负锛�6骞�
* 浠ユ湀涓哄崟浣嶇浉宸负锛�73涓湀
* 浠ユ棩涓哄崟浣嶇浉宸负锛�2220澶�
- * @param fromDate
- * @param toDate
+ * @param toDateOrigin
* @return
*/
- public static DateCompare dayCompare(Date fromDate,Date toDate,Date freeStart,Date freeEnd){
+ public static DateCompare dayCompare(Date fromDateOrigin,Date toDateOrigin,Date freeStart,Date freeEnd){
//寮�濮嬫椂闂村線鍚庡欢浼革紝闄ゅ幓鏈夋晥鏃舵湡
- fromDate = DateUtil.addDaysToDate(fromDate,getIntersectingDays(fromDate,toDate,freeStart,freeEnd));
- if(toDate.getTime()<= fromDate.getTime()){
+ Date fromDate = DateUtil.addDaysToDate(fromDateOrigin,getIntersectingDays(fromDateOrigin,DateUtil.addDaysToDate(toDateOrigin,1),
+ freeStart,
+ Objects.isNull(freeEnd)?null:DateUtil.addDaysToDate(freeEnd,1))
+ );
+ if(toDateOrigin.getTime()< fromDate.getTime()){
return DateCompare.builder().day(0).month(0).year(0).yearFloat(new BigDecimal(0)).monthFloat(new BigDecimal(0)).build();
}
+ Date toDate =DateUtil.addDaysToDate(toDateOrigin, 1);
+// toDate = DateUtil.addDaysToDate(toDate,1);//鍖呭惈鎴鏃ユ湡
Calendar from = Calendar.getInstance();
from.setTime(fromDate);
Calendar to = Calendar.getInstance();
@@ -62,22 +66,45 @@
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));
+ 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)) ;
+ 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 DateCompare monthYearCompare(Date fromDate,Date toDate ){
+
+ public static void main(String[] args) {
+ DateCompare dateCompare = DateCompare.monthYearCompare(DateUtil.getDateFromString("2025-06-03 00:00:00"),DateUtil.getDateByString("2025-09-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 toDateOrigin ){
//寮�濮嬫椂闂村線鍚庡欢浼革紝闄ゅ幓鏈夋晥鏃舵湡
+ Date toDate =DateUtil.addDaysToDate(toDateOrigin, 1);
Calendar from = Calendar.getInstance();
from.setTime(fromDate);
Calendar to = Calendar.getInstance();
@@ -95,22 +122,35 @@
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));
+ 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)) ;
+ 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 int getIntersectingDays(Date start1, Date end1, Date start2, Date end2) {
+ if(Objects.isNull(start2)||Objects.isNull(end2)){
+ return 0;
+ }
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 ;
}
--
Gitblit v1.9.3