From e16302f9d475c7cc4dd18c5abf1a23cb5502e362 Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期三, 28 五月 2025 14:57:56 +0800
Subject: [PATCH] 密码验证加-

---
 src/main/java/com/whyc/util/DateUtil.java |  251 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 240 insertions(+), 11 deletions(-)

diff --git a/src/main/java/com/whyc/util/DateUtil.java b/src/main/java/com/whyc/util/DateUtil.java
index e10bbe6..361414e 100644
--- a/src/main/java/com/whyc/util/DateUtil.java
+++ b/src/main/java/com/whyc/util/DateUtil.java
@@ -3,6 +3,7 @@
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Description : 鏃堕棿宸ュ叿绫�
@@ -14,6 +15,38 @@
     public static SimpleDateFormat YYYY_MM_DD_HH_MM_SS_UNION=new SimpleDateFormat("yyyyMMddHHmmss");
 	public static SimpleDateFormat YYYY_MM_DD=new SimpleDateFormat("yyyy-MM-dd");
 	public static SimpleDateFormat YYYY_MM=new SimpleDateFormat("yyyy-MM");
+	public static SimpleDateFormat YYYY_MM_TABLE=new SimpleDateFormat("yyyy_MM");
+
+	public static int compare(String date1Str,String date2Str) throws ParseException {
+        Date date1 = YYYY_MM_DD_HH_MM_SS.parse(date1Str);
+        Date date2 = YYYY_MM_DD_HH_MM_SS.parse(date2Str);
+        if(date1.compareTo(date2)>0){
+            return 1;
+        }else if(date1.compareTo(date2) == 0){
+            return 0;
+        }else{
+            return -1;
+        }
+    }
+
+    public static Date getMaxTime(String date1Str,String date2Str,String date3Str) {
+	    try {
+            Date date1 = YYYY_MM_DD_HH_MM_SS.parse(date1Str);
+            Date date2 = YYYY_MM_DD_HH_MM_SS.parse(date2Str);
+            Date date3 = YYYY_MM_DD_HH_MM_SS.parse(date3Str);
+
+            Date maxTime = date1;
+            if (maxTime.compareTo(date2) < 0) {
+                maxTime = date2;
+            }
+            if (maxTime.compareTo(date3) < 0) {
+                maxTime = date3;
+            }
+            return maxTime;
+        }catch (ParseException e){
+	        return null;
+        }
+    }
 
     public static List<List<Date>> getMonthTime(Date startTimeDate,Date endTimeDate) throws ParseException {
         List<List<Date>> timeList = new LinkedList<>();
@@ -37,7 +70,8 @@
         Calendar dateTemp = Calendar.getInstance();
         for (int i = 0; i < len; i++) {
             List<Date> SEList = new LinkedList<>();
-            dateTemp.setTime(YYYY_MM_DD_HH_MM_SS.parse(startY+"-"+startM+"-01 00:00:00"));
+            //dateTemp.setTime(YYYY_MM_DD_HH_MM_SS.parse(startY+"-"+startM+"-01 00:00:00"));
+            dateTemp.setTime(ThreadLocalUtil.parse(startY+"-"+startM+"-01 00:00:00",1));
             Date recordTime,recordTime1;
 
             dateTemp.add(Calendar.MONTH,i);
@@ -157,11 +191,13 @@
      */
     public static List<String> getMonthList(String startTimeStr,String endTimeStr) throws ParseException {
         Calendar startTimeCalendar = Calendar.getInstance();
-        Date startTime = DateUtil.YYYY_MM_DD_HH_MM_SS.parse(startTimeStr);
+        //Date startTime = DateUtil.YYYY_MM_DD_HH_MM_SS.parse(startTimeStr);
+        Date startTime = ThreadLocalUtil.parse(startTimeStr,1);
         startTimeCalendar.setTime(startTime);
 
         Calendar endTimeCalendar = Calendar.getInstance();
-        Date endTime = DateUtil.YYYY_MM_DD_HH_MM_SS.parse(endTimeStr);
+        //Date endTime = DateUtil.YYYY_MM_DD_HH_MM_SS.parse(endTimeStr);
+        Date endTime = ThreadLocalUtil.parse(endTimeStr,1);
         endTimeCalendar.setTime(endTime);
 
         /*String[] startTimeSplit = startTimeStr.split("-");
@@ -330,6 +366,93 @@
         return result;
     }
 
+    /**
+     * 鍦ㄥ垎琛ㄧ殑鎯呭喌涓嬩娇鐢�,鎸夋湀鍒嗚〃,鏌ヨ闇�瑕佸垏鍓叉煡璇娇鐢� 鏃堕棿鍊掑簭
+     * <p>
+     * 鏍规嵁浼犲叆鐨勮捣姝㈡椂闂�,鎸夌収骞村垏鍓叉垚涓嶅悓鏃堕棿娈�
+     *
+     * @param startTime 2023-01-01 10:00:00
+     * @param endTime   2023-05-01 10:10:10
+     * @return 绀轰緥
+     * {
+     *  2023_04=[Fri Dec 25 14:12:22 CST 2020, Thu Dec 31 23:59:59 CST 2020]
+     *  2023_03=[Fri Jan 01 00:00:00 CST 2021, Fri Dec 31 23:59:59 CST 2021],
+     *  2023_02=[Sat Jan 01 00:00:00 CST 2022, Sat Dec 31 23:59:59 CST 2022],
+     *  2023_01=[Sun Jan 01 00:00:00 CST 2023, Tue Jan 24 16:45:22 CST 2023],
+     *
+     * }
+     * 浣跨敤鏂规硶:
+     * 鏍规嵁杩斿洖鐨勭涓�涓暟鎹�,濡傛灉瀛樺湪琛�,鍒欐煡璇㈢瓫閫夋潯浠朵负>=杈撳叆鐨勮捣濮嬫椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勮捣濮嬫椂闂�
+     * 鏍规嵁杩斿洖鐨勬渶鍚庝釜鏁版嵁,濡傛灉琛ㄥ瓨鍦�,鍒欐煡璇㈢瓫閫夋潯浠朵负<=杈撳叆鐨勭粓姝㈡椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勭粓姝㈡椂闂�
+     * 杩斿洖鐨勯潪绗竴鏈�鍚庢暟鎹�,鏌ヨ鍏ㄨ〃
+     */
+    public static Map<String,List<Date>> getMonthListDesc(Date startTime,Date endTime) throws ParseException {
+        Map<String,List<Date>> result = new LinkedHashMap<>();
+        Calendar startTimeC = Calendar.getInstance();
+        startTimeC.setTime(startTime);
+        int startYear = startTimeC.get(Calendar.YEAR);
+        int startMonth = startTimeC.get(Calendar.MONTH);
+
+        Calendar endTimeC = Calendar.getInstance();
+        endTimeC.setTime(endTime);
+        int endYear = endTimeC.get(Calendar.YEAR);
+        int endMonth = endTimeC.get(Calendar.MONTH);
+
+        //鐩稿樊鐨勬湀浠�
+        int monthCount = endYear*12+endMonth-(startYear*12+startMonth);
+
+        for (int i = monthCount; i >= 0; i--) {
+            List<Date> dateList = new LinkedList<>();
+            if(monthCount == 0 ){ //璧锋鏃堕棿娌℃湁璺ㄦ湀
+                dateList.add(startTime);
+                dateList.add(endTime);
+            }
+            else if(i==0){ //绗竴鏈�
+                dateList.add(startTime);
+
+                Calendar instance = Calendar.getInstance();
+                instance.setTime(startTime);
+                instance.set(Calendar.DAY_OF_MONTH,instance.getActualMaximum(Calendar.DAY_OF_MONTH));
+                instance.set(Calendar.HOUR_OF_DAY,instance.getActualMaximum(Calendar.HOUR_OF_DAY));
+                instance.set(Calendar.MINUTE,instance.getActualMaximum(Calendar.MINUTE));
+                instance.set(Calendar.SECOND,instance.getActualMaximum(Calendar.SECOND));
+                dateList.add(instance.getTime());
+            }
+            else if(i== monthCount){ //灏炬湀
+                Calendar instance = Calendar.getInstance();
+                instance.setTime(endTime);
+                instance.set(Calendar.DAY_OF_MONTH,instance.getActualMinimum(Calendar.DAY_OF_MONTH));
+                instance.set(Calendar.HOUR_OF_DAY,instance.getActualMinimum(Calendar.HOUR_OF_DAY));
+                instance.set(Calendar.MINUTE,instance.getActualMinimum(Calendar.MINUTE));
+                instance.set(Calendar.SECOND,instance.getActualMinimum(Calendar.SECOND));
+                dateList.add(instance.getTime());
+
+                dateList.add(endTime);
+            }else{
+                Calendar instance = Calendar.getInstance();
+                instance.setTime(startTime);
+                instance.add(Calendar.MONTH,i);
+                instance.set(Calendar.DAY_OF_MONTH,instance.getActualMinimum(Calendar.DAY_OF_MONTH));
+                instance.set(Calendar.HOUR_OF_DAY,instance.getActualMinimum(Calendar.HOUR_OF_DAY));
+                instance.set(Calendar.MINUTE,instance.getActualMinimum(Calendar.MINUTE));
+                instance.set(Calendar.SECOND,instance.getActualMinimum(Calendar.SECOND));
+                dateList.add(instance.getTime());
+
+                Calendar instance2 = Calendar.getInstance();
+                instance2.setTime(startTime);
+                instance2.add(Calendar.MONTH,i);
+                instance2.set(Calendar.DAY_OF_MONTH,instance2.getActualMaximum(Calendar.DAY_OF_MONTH));
+                instance2.set(Calendar.HOUR_OF_DAY,instance2.getActualMaximum(Calendar.HOUR_OF_DAY));
+                instance2.set(Calendar.MINUTE,instance2.getActualMaximum(Calendar.MINUTE));
+                instance2.set(Calendar.SECOND,instance2.getActualMaximum(Calendar.SECOND));
+                dateList.add(instance2.getTime());
+
+            }
+            //result.put(DateUtil.YYYY_MM_TABLE.format(dateList.get(0)),dateList);
+            result.put(ThreadLocalUtil.format(dateList.get(0),2),dateList);
+        }
+        return result;
+    }
 
     /**
      *  鏌ヨ浣跨敤鏃�,闇�瑕佸鐞� 榛樿琛ㄦ煡璇㈢殑闂 鍊掑簭
@@ -422,15 +545,121 @@
         return yearTimeDescMap;
     }
 
-    public static void main(String[] args) throws ParseException {
-        Date d1 = YYYY_MM_DD_HH_MM_SS.parse("2020-12-25 14:12:22");
-        Date d2 = YYYY_MM_DD_HH_MM_SS.parse("2022-12-29 09:12:22");
-        Map<String, List<Date>> yearListForSubTables = getQueryTimeForSubTablesDesc(d1, d2);
-        Set<String> strings = yearListForSubTables.keySet();
-        Set<Map.Entry<String, List<Date>>> entries = yearListForSubTables.entrySet();
-        for (Map.Entry<String, List<Date>> entry : entries) {
-            System.out.println(entry);
+    /**
+     * 鎸夊勾鍒掑垎
+     * 浼樺寲getQueryTimeForSubTablesDesc,寰呮祴璇�
+     * 鏇存柊default琛ㄦ槸鍚︽煡璇㈢殑閫昏緫,鏀箌|涓�&&
+     *
+     */
+    public static Map<String,List<Date>> getQueryTimeForSubTablesDesc2(Date startTimeDate,Date endTimeDate) throws ParseException {
+        //鏍规嵁绛涢�夌殑鏃堕棿娈�,鏌ヨ鍑虹鍚堣姹傜殑鍚勫垎琛ㄨ褰曟暟
+        //棣栧厛,濡傛灉褰撳墠鏃堕棿瓒呰繃7鏈�,榛樿琛ㄤ腑鍙湁鏈勾搴︾殑;濡傛灉娌¤秴杩�7鏈�,榛樿琛ㄨ繕瀛樺湪涓婁竴骞村害鐨勮褰�
+        Calendar now = Calendar.getInstance();
+        if(endTimeDate.compareTo(now.getTime())>0){ //鏍¢獙浼樺寲鏈�澶ф煡璇㈡椂闂�
+            endTimeDate = now.getTime();
         }
+        Calendar timeBefore7Month = Calendar.getInstance();
+        timeBefore7Month.add(Calendar.MONTH,-7);
+
+        LinkedHashMap<String,List<Date>> yearTimeMap = (LinkedHashMap<String, List<Date>>) DateUtil.getYearListDesc(startTimeDate, endTimeDate);
+        Map<String,List<Date>> yearTimeDescMap = new LinkedHashMap<>();
+        boolean existDefaultYear = false;
+        //鏌ヨ鐨勫紑濮嬫椂闂� 灏忎簬鐜板湪
+        //鏌ヨ鐨勭粨鏉熸椂闂� 澶т簬 涓冧釜鏈堝墠
+        if(startTimeDate.before(now.getTime()) && endTimeDate.after(timeBefore7Month.getTime())){
+            List<Date> defaultDateList = new LinkedList<>();
+            defaultDateList.add(startTimeDate);
+            defaultDateList.add(endTimeDate);
+
+            yearTimeMap.put("default",defaultDateList);
+            existDefaultYear = true;
+        }
+        //璋冩暣涓嬮『搴�,灏哾efault璋冩暣鍒伴浣�
+        if(existDefaultYear){
+            List<Date> defaultTimeList = yearTimeMap.get("default");
+            yearTimeDescMap.put("default",defaultTimeList);
+        }
+        Set<String> yearSet = yearTimeMap.keySet();
+        for (String year : yearSet) {
+            if(!year.equals("default")){
+                yearTimeDescMap.put(year,yearTimeMap.get(year));
+            }
+        }
+
+        return yearTimeDescMap;
+    }
+
+    /**
+     * 鎸夋湀鍒掑垎,鏃堕棿鍊掑簭
+     * 鍦ㄥ師鏉ユ寜璧锋鏃堕棿鑾峰彇鏈堜唤鍒掑垎闆嗗悎鐨勫熀纭�涓�,鍔犲叆瀹為檯瀛愯〃閫昏緫,褰撳墠鏈堝唴鐨�,鍦╠efault琛�
+     * */
+    public static Map<String,List<Date>> getQueryTimeForSubTablesByMonthDesc(Date startTimeDate,Date endTimeDate) throws ParseException {
+        //鏍规嵁绛涢�夌殑鏃堕棿娈�,鏌ヨ鍑虹鍚堣姹傜殑鍚勫垎琛ㄨ褰曟暟
+        //棣栧厛,濡傛灉褰撳墠鏃堕棿瓒呰繃7鏈�,榛樿琛ㄤ腑鍙湁鏈勾搴︾殑;濡傛灉娌¤秴杩�7鏈�,榛樿琛ㄨ繕瀛樺湪涓婁竴骞村害鐨勮褰�
+        Calendar now = Calendar.getInstance();
+        if(endTimeDate.compareTo(now.getTime())>0){ //鏍¢獙浼樺寲鏈�澶ф煡璇㈡椂闂�
+            endTimeDate = now.getTime();
+        }
+        LinkedHashMap<String,List<Date>> yearTimeMap = (LinkedHashMap<String, List<Date>>) DateUtil.getMonthListDesc(startTimeDate, endTimeDate);
+        Map<String,List<Date>> yearTimeDescMap = new LinkedHashMap<>();
+        boolean existDefaultYear = false;
+        //鏌ヨ鐨勭粨鏉熸椂闂� 鍦ㄥ綋鏈�,鍒欐湁default琛�
+        //鍚屾椂,鎶瑰幓鏈堜唤闆嗗悎閲岀殑褰撴湀
+        //if(DateUtil.YYYY_MM_TABLE.format(endTimeDate).equals(DateUtil.YYYY_MM_TABLE.format(now.getTime()))){
+        if(ThreadLocalUtil.format(endTimeDate,2).equals(ThreadLocalUtil.format(now.getTime(),2))){
+            List<Date> defaultDateList = new LinkedList<>();
+            defaultDateList.add(startTimeDate);
+            defaultDateList.add(endTimeDate);
+
+            yearTimeMap.put("default",defaultDateList);
+            existDefaultYear = true;
+
+            //yearTimeMap.remove(DateUtil.YYYY_MM_TABLE.format(endTimeDate));
+            yearTimeMap.remove(ThreadLocalUtil.format(endTimeDate,2));
+        }
+        //璋冩暣涓嬮『搴�,灏哾efault璋冩暣鍒伴浣�
+        if(existDefaultYear){
+            List<Date> defaultTimeList = yearTimeMap.get("default");
+            yearTimeDescMap.put("default",defaultTimeList);
+        }
+        Set<String> yearSet = yearTimeMap.keySet();
+        for (String year : yearSet) {
+            if(!year.equals("default")){
+                yearTimeDescMap.put(year,yearTimeMap.get(year));
+            }
+        }
+
+        return yearTimeDescMap;
+    }
+
+
+    public static void main(String[] args) throws ParseException {
+        //Date d1 = YYYY_MM_DD_HH_MM_SS.parse("2023-01-22 14:12:22");
+        //Date d2 = YYYY_MM_DD_HH_MM_SS.parse("2023-08-24 16:45:22");
+        //Map<String, List<Date>> monthListDesc = getQueryTimeForSubTablesByMonthDesc(d1, d2);
+        //
+        //Set<Map.Entry<String, List<Date>>> entries = monthListDesc.entrySet();
+        //for (Map.Entry<String, List<Date>> entry : entries) {
+        //    System.out.println(entry);
+        //}
+        //Map<String,String> map = new HashMap<>();
+        //map.put("2022_01","");
+        //map.put("2022_02","");
+        //map.put("2022_10","");
+        //map.put("2022_12","");
+        //map.put("2021_03","");
+        //map.put("2023_01","");
+        //map.put("2023_05","");
+        //map.put("2021_10","");
+        //Set<String> keySet = map.keySet();
+        //List<String> keySetDesc = keySet.stream().sorted(Comparator.comparing(String::hashCode).reversed()).collect(Collectors.toList());
+        String t1 = "2024-01-25 12:22:29";
+        String t2 = "2024-01-25 12:32:24";
+        String t3 = "2024-01-25 12:42:26";
+        Date maxTime = getMaxTime(t1, t2, t3);
+        System.out.println(maxTime.toString());
+
+
     }
 
 }

--
Gitblit v1.9.1