From b56c0758e2158261d973e90b581d1ed78c5dfc79 Mon Sep 17 00:00:00 2001 From: whyclxw <810412026@qq.com> Date: 星期三, 11 九月 2024 15:38:54 +0800 Subject: [PATCH] 告警实时socket和历史分库分表历史查询 --- src/main/java/com/whyc/util/DateUtil.java | 620 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 507 insertions(+), 113 deletions(-) diff --git a/src/main/java/com/whyc/util/DateUtil.java b/src/main/java/com/whyc/util/DateUtil.java index 35f2df0..aef26cb 100644 --- a/src/main/java/com/whyc/util/DateUtil.java +++ b/src/main/java/com/whyc/util/DateUtil.java @@ -5,135 +5,289 @@ import java.util.*; /** - * 鏃ユ湡澶勭悊宸ュ叿绫� - * @Author xuzhongpei - * @Date 2023-11-16 - * */ + * @Description : 鏃堕棿宸ュ叿绫� + * @date 2020/10/15 + **/ public class DateUtil { - /**ThreadLocal鍓湰褰㈠紡閬垮厤澶氱嚎绋嬩腑 鏁版嵁瀹夊叏闂*/ - private static ThreadLocal<SimpleDateFormat> YYYY_MM_DD_HH_MM_SS = ThreadLocal.withInitial(()->new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")); - private static ThreadLocal<SimpleDateFormat> YYYY_MM_DD_HH_MM_SS2 = ThreadLocal.withInitial(()->new SimpleDateFormat("yyyy-MM-dd_HH_mm_ss")); - private static ThreadLocal<SimpleDateFormat> YYYY_MM_DD_HH_MM_SS_UNION = ThreadLocal.withInitial(()->new SimpleDateFormat("yyyyMMddHHmmss")); - private static ThreadLocal<SimpleDateFormat> YYYY_MM_DD = ThreadLocal.withInitial(()->new SimpleDateFormat("yyyy-MM-dd")); - private static ThreadLocal<SimpleDateFormat> YYYY_MM_DD_UNION = ThreadLocal.withInitial(()->new SimpleDateFormat("yyyyMMdd")); + public static SimpleDateFormat YYYY_MM_DD_HH_MM_SS=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + 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 String format_YYYY_MM_DD_HH_MM_SS(Date date){ - return YYYY_MM_DD_HH_MM_SS.get().format(date); + 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 String format_YYYY_MM_DD_HH_MM_SS2(Date date){ - return YYYY_MM_DD_HH_MM_SS2.get().format(date); + 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 String format_YYYY_MM_DD_HH_MM_SS_UNION(Date date){ - return YYYY_MM_DD_HH_MM_SS_UNION.get().format(date); + public static List<List<Date>> getMonthTime(Date startTimeDate,Date endTimeDate) throws ParseException { + List<List<Date>> timeList = new LinkedList<>(); + + Calendar startTimeCalendar = Calendar.getInstance(); + startTimeCalendar.setTime(startTimeDate); + + Calendar endTimeCalendar = Calendar.getInstance(); + endTimeCalendar.setTime(endTimeDate); + + //鎸夋湀浠藉垏鍒嗘椂娈� + int startY = startTimeCalendar.get(Calendar.YEAR); + int startM = startTimeCalendar.get(Calendar.MONTH)+1; + + int endY = endTimeCalendar.get(Calendar.YEAR); + int endM = endTimeCalendar.get(Calendar.MONTH)+1; + + int Y = endY - startY; + int len = Y*12+(endM-startM)+1; + + 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(ThreadLocalUtil.parse(startY+"-"+startM+"-01 00:00:00",1)); + Date recordTime,recordTime1; + + dateTemp.add(Calendar.MONTH,i); + recordTime = dateTemp.getTime(); + + int lastDay = dateTemp.getActualMaximum(Calendar.DAY_OF_MONTH); + dateTemp.set(Calendar.DAY_OF_MONTH,lastDay); + dateTemp.set(Calendar.HOUR_OF_DAY,23); + dateTemp.set(Calendar.MINUTE,59); + dateTemp.set(Calendar.SECOND,59); + recordTime1 = dateTemp.getTime(); + + if(i==0){ + recordTime = startTimeDate; + } + if(i==len-1){ + recordTime1 = endTimeDate; + } + SEList.add(recordTime); + SEList.add(recordTime1); + + timeList.add(SEList); + } + return timeList; } - public static String YYYY_MM_DD(Date date){ - return YYYY_MM_DD.get().format(date); + /** + * 鍦ㄥ垎琛ㄧ殑鎯呭喌涓嬩娇鐢�,鎸夊勾鍒嗚〃,鏌ヨ闇�瑕佸垏鍓叉煡璇娇鐢� + * <p> + * 鏍规嵁浼犲叆鐨勮捣姝㈡椂闂�,鎸夌収骞村垏鍓叉垚涓嶅悓鏃堕棿娈� + * + * @param startTime 2021-01-01 10:00:00 + * @param endTime 2023-05-01 10:10:10 + * @return 绀轰緥[2021, 2022, 2023] + * 浣跨敤鏂规硶: + * 鏍规嵁杩斿洖鐨勭涓�涓暟鎹�,濡傛灉瀛樺湪琛�,鍒欐煡璇㈢瓫閫夋潯浠朵负>=杈撳叆鐨勮捣濮嬫椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勮捣濮嬫椂闂� + * 鏍规嵁杩斿洖鐨勬渶鍚庝釜鏁版嵁,濡傛灉琛ㄥ瓨鍦�,鍒欐煡璇㈢瓫閫夋潯浠朵负<=杈撳叆鐨勭粓姝㈡椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勭粓姝㈡椂闂� + * 杩斿洖鐨勯潪绗竴鏈�鍚庢暟鎹�,鏌ヨ鍏ㄨ〃 + */ + public static Map<String,List<Date>> getYearList(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); + + Calendar endTimeC = Calendar.getInstance(); + endTimeC.setTime(endTime); + int endYear = endTimeC.get(Calendar.YEAR); + int yearSize = endYear - startYear + 1; + for (int i = startYear; i <= endYear; i++) { + List<Date> dateList = new LinkedList<>(); + if(yearSize == 1){ //璧锋鏃堕棿娌℃湁璺ㄥ勾 + dateList.add(startTime); + dateList.add(endTime); + } + else if(i==startYear){ //绗竴骞� + dateList.add(startTime); + + Calendar instance = Calendar.getInstance(); + instance.set(Calendar.YEAR,i); + instance.set(Calendar.MONTH,instance.getActualMaximum(Calendar.MONTH)); + 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== endYear){ //灏惧勾 + Calendar instance = Calendar.getInstance(); + instance.set(Calendar.YEAR,i); + instance.set(Calendar.MONTH,instance.getActualMinimum(Calendar.MONTH)); + 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.set(Calendar.YEAR,i); + instance.set(Calendar.MONTH,instance.getActualMinimum(Calendar.MONTH)); + 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.set(Calendar.YEAR,i); + instance2.set(Calendar.MONTH,instance2.getActualMaximum(Calendar.MONTH)); + 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(String.valueOf(i),dateList); + } + return result; } - public static String format_YYYY_MM_DD_UNION(Date date){ - return YYYY_MM_DD_UNION.get().format(date); + /** + * + * 鍦ㄥ垎琛ㄧ殑鎯呭喌涓嬩娇鐢�,鎸夋湀鍒嗚〃,鏌ヨ闇�瑕佸垏鍓叉煡璇娇鐢� + * + * 鏍规嵁浼犲叆鐨勮捣姝㈡椂闂�,鎸夌収鏈堝垏鍓叉垚涓嶅悓鏃堕棿娈� + * @param startTimeStr 2022-11-01 10:00:00 + * @param endTimeStr 2023-05-01 10:10:10 + * @return 绀轰緥[2022_12,2023_1,2023_2,2023_3,2023_4,2023_5] TODO 杩欎釜杩斿洖瀵硅薄鏍煎紡 闇�瑕佹牴鎹笟鍔¢渶瑕佽繘琛岃皟鏁� + * 浣跨敤鏂规硶: + * 鏍规嵁杩斿洖鐨勭涓�涓暟鎹�,濡傛灉瀛樺湪琛�,鍒欐煡璇㈢瓫閫夋潯浠朵负>=杈撳叆鐨勮捣濮嬫椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勮捣濮嬫椂闂� + * 鏍规嵁杩斿洖鐨勬渶鍚庝釜鏁版嵁,濡傛灉琛ㄥ瓨鍦�,鍒欐煡璇㈢瓫閫夋潯浠朵负<=杈撳叆鐨勭粓姝㈡椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勭粓姝㈡椂闂� + * 杩斿洖鐨勯潪绗竴鏈�鍚庢暟鎹�,鏌ヨ鍏ㄨ〃 + * + */ + 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 = ThreadLocalUtil.parse(startTimeStr,1); + startTimeCalendar.setTime(startTime); + + Calendar endTimeCalendar = Calendar.getInstance(); + //Date endTime = DateUtil.YYYY_MM_DD_HH_MM_SS.parse(endTimeStr); + Date endTime = ThreadLocalUtil.parse(endTimeStr,1); + endTimeCalendar.setTime(endTime); + + /*String[] startTimeSplit = startTimeStr.split("-"); + int startYear = Integer.parseInt(startTimeSplit[0]); + int startMonth = Integer.parseInt(startTimeSplit[1]); + + String[] endTimeSplit = endTimeStr.split("-"); + int endYear = Integer.parseInt(endTimeSplit[0]); + int endMonth = Integer.parseInt(endTimeSplit[1]);*/ + + List<String> yearMonthList = new LinkedList<>(); + while (!startTimeCalendar.after(endTimeCalendar)){ //璧峰鏃堕棿澶т簬缁堟鏃堕棿鍒欏仠姝� + yearMonthList.add(startTimeCalendar.get(Calendar.YEAR)+"_"+(startTimeCalendar.get(Calendar.MONTH)+1)); + startTimeCalendar.add(Calendar.MONTH,1); + } + return yearMonthList; } + /** + * 鏌ヨ浣跨敤鏃�,闇�瑕佸鐞� 榛樿琛ㄦ煡璇㈢殑闂 + * 绀轰緥: + * <p> + * {2020=[Fri Dec 25 14:12:22 CST 2020, Thu Dec 31 23:59:59 CST 2020]} + * {2021=[Fri Jan 01 00:00:00 CST 2021, Fri Dec 31 23:59:59 CST 2021]} + * {2022=[Sat Jan 01 00:00:00 CST 2022, Tue Nov 29 09:12:22 CST 2022]} + * 鎴� + * {2020=[Fri Dec 25 14:12:22 CST 2020, Thu Dec 31 23:59:59 CST 2020]} + * {2021=[Fri Jan 01 00:00:00 CST 2021, Fri Dec 31 23:59:59 CST 2021]} + * {2022=[Sat Jan 01 00:00:00 CST 2022, Thu Dec 29 09:12:22 CST 2022]} + * {default=[Wed Dec 14 15:27:13 CST 2022, Thu Dec 29 09:12:22 CST 2022]} + * </p> + * key涓烘暟瀛�,琛ㄧず骞村害鍒嗚〃;default涓洪粯璁よ〃 + * @param startTimeDate 璧峰鏃堕棿 + * @param endTimeDate 缁堟鏃堕棿 + * @return 闇�瑕佹煡璇㈢殑琛ㄥ強鏌ヨ鏃堕棿 + * @throws ParseException + */ + public static Map<String,List<Date>> getQueryTimeForSubTables(Date startTimeDate,Date endTimeDate) throws ParseException { + //鏍规嵁绛涢�夌殑鏃堕棿娈�,鏌ヨ鍑虹鍚堣姹傜殑鍚勫垎琛ㄨ褰曟暟 + //棣栧厛,濡傛灉褰撳墠鏃堕棿瓒呰繃7鏈�,榛樿琛ㄤ腑鍙湁鏈勾搴︾殑;濡傛灉娌¤秴杩�7鏈�,榛樿琛ㄨ繕瀛樺湪涓婁竴骞村害鐨勮褰� + Calendar instance = Calendar.getInstance(); + if(endTimeDate.compareTo(instance.getTime())>0){ //鏍¢獙浼樺寲鏈�澶ф煡璇㈡椂闂� + endTimeDate = instance.getTime(); + } + int nowYear = instance.get(Calendar.YEAR); + instance.add(Calendar.MONTH,-6); + int beforeYear = instance.get(Calendar.YEAR); + Date beforeYearTime = instance.getTime(); + instance.setTime(endTimeDate); + int endTimeYear = instance.get(Calendar.YEAR); - //鑾峰彇鎸囧畾骞存湀鐨勫ぉ鏁� - public static int getDaysByYearMonth(int year, int month) { + Calendar startTime = Calendar.getInstance(); + startTime.setTime(startTimeDate); - Calendar a = Calendar.getInstance(); - a.set(Calendar.YEAR, year); - a.set(Calendar.MONTH, month - 1); - a.set(Calendar.DATE, 1); - a.roll(Calendar.DATE, -1); - int maxDate = a.get(Calendar.DATE); - return maxDate; + Map<String,List<Date>> yearTimeMap = DateUtil.getYearList(startTimeDate, endTimeDate);; + if(nowYear == beforeYear){ //榛樿琛ㄥ彧鏈夋湰骞村害鐨�(瓒呰繃浜嗗崐骞�,榛樿琛ㄨ褰曞叏閮ㄥ彧鏈夋湰骞村害鐨�,鍚屾椂浼氱敓鎴愪簡褰撳墠骞村害鐨勫垎琛�) + //濡傛灉鏌ヨ鏃堕棿鑼冨洿鍖呭惈褰撳墠骞村害,鍒欓渶瑕佹煡璇㈤粯璁よ〃 + if(startTime.get(Calendar.YEAR) >= nowYear && endTimeYear <= nowYear){ + //寮�濮嬫椂闂磋缃勾搴﹀垵濮嬫椂闂� + Calendar defaultTableStartTime = Calendar.getInstance(); + defaultTableStartTime.set(Calendar.YEAR,nowYear); + defaultTableStartTime.set(Calendar.MONTH,defaultTableStartTime.getActualMinimum(Calendar.MONTH)); + defaultTableStartTime.set(Calendar.DAY_OF_MONTH,defaultTableStartTime.getActualMinimum(Calendar.DAY_OF_MONTH)); + defaultTableStartTime.set(Calendar.HOUR_OF_DAY,defaultTableStartTime.getActualMinimum(Calendar.HOUR_OF_DAY)); + defaultTableStartTime.set(Calendar.MINUTE,defaultTableStartTime.getActualMinimum(Calendar.MINUTE)); + defaultTableStartTime.set(Calendar.SECOND,defaultTableStartTime.getActualMinimum(Calendar.SECOND)); + //缁堟鏃堕棿璁剧疆涓哄綋鍓嶆椂闂� + List<Date> defaultDateList = new LinkedList<>(); + defaultDateList.add(defaultTableStartTime.getTime()); + defaultDateList.add(endTimeDate); + + yearTimeMap.put("default",defaultDateList); + + } + + }else{ //鏌ヨ鏃堕棿鑼冨洿涓嶅湪褰撳墠骞村害 + //榛樿琛ㄤ腑瀛樺湪涓婁竴骞村害鐨勮褰�.涓婁竴骞寸殑鏈�鏃╂椂闂翠负beforeYearTime-涓婁竴骞寸殑骞存湯 + //鍒ゆ柇鏌ヨ鏃堕棿鑼冨洿鏄惁鍖呭惈榛樿琛ㄤ腑涓婁竴骞村害鐨勬椂闂� + if(instance.getTime().compareTo(beforeYearTime)>0){ //鏌ヨ鏃堕棿澶т簬榛樿琛ㄤ腑涓婁竴骞村害鏃堕棿,璇存槑鏌ヨ璁板綍涔熷寘鍚湪榛樿琛ㄤ腑 + //璧峰鏃堕棿 + //缁堟鏃堕棿 + List<Date> defaultDateList = new LinkedList<>(); + defaultDateList.add(beforeYearTime); + defaultDateList.add(endTimeDate); + + yearTimeMap.put("default",defaultDateList); + } + } + return yearTimeMap; } - //鑾峰彇鏌愬勾鏌愭湀鐨勮捣濮嬪拰缁撴潫鏃堕棿 - //闇�瑕佹敞鎰忕殑鏄細鏈堜唤鏄粠0寮�濮嬬殑锛屾瘮濡傝濡傛灉杈撳叆5鐨勮瘽锛屽疄闄呬笂鏄剧ず鐨勬槸4鏈堜唤鐨勬渶鍚庝竴澶╋紝鍗冧竾涓嶈鎼為敊浜嗗摝 - public static String getLastDayOfMonth(int year, int month) { - Calendar cal = Calendar.getInstance(); - cal.set(Calendar.YEAR, year); - cal.set(Calendar.MONTH, month); - cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DATE)); - return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime())+"23:59:59"; - } - - public static String getFirstDayOfMonth(int year, int month) { - Calendar cal = Calendar.getInstance(); - cal.set(Calendar.YEAR, year); - cal.set(Calendar.MONTH, month); - cal.set(Calendar.DAY_OF_MONTH,cal.getMinimum(Calendar.DATE)); - return new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime())+"00:00:00"; - } - //鑾峰彇褰撳墠鏃堕棿鐨勫勾浠� - public static int getNowYear(){ - Calendar ca = Calendar.getInstance();//寰楀埌涓�涓狢alendar鐨勫疄渚� - ca.setTime(new Date()); //璁剧疆鏃堕棿涓哄綋鍓嶆椂闂� - int year = ca.get(Calendar.YEAR); - //System.out.println(month); - return year; - } - //鑾峰彇褰撳墠鏃堕棿鐨勬湀浠� - public static int getNowMonth(){ - Calendar ca = Calendar.getInstance();//寰楀埌涓�涓狢alendar鐨勫疄渚� - ca.setTime(new Date()); //璁剧疆鏃堕棿涓哄綋鍓嶆椂闂� - int month = ca.get(Calendar.MONTH) + 1; - //System.out.println(month); - return month; - } - //鑾峰彇褰撳墠鏃堕棿鐨勬棩鏈� - public static int getNowDay(){ - Calendar ca = Calendar.getInstance();//寰楀埌涓�涓狢alendar鐨勫疄渚� - ca.setTime(new Date()); //璁剧疆鏃堕棿涓哄綋鍓嶆椂闂� - int day = ca.get(Calendar.DAY_OF_MONTH); - //System.out.println(month); - return day; - } - //褰撳墠鏃堕棿鍔犱笂x灏忔椂 - public static String getDateAdd(int minute){ - Date date = new Date(); - Calendar c = Calendar.getInstance(); - c.setTime(date); - c.add(Calendar.MINUTE, minute); - return new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss").format(c.getTime()); - } - - //鑾峰彇鏃堕棿鐨勫勾浠� - public static int getDateYear(Date date){ - Calendar ca = Calendar.getInstance();//寰楀埌涓�涓狢alendar鐨勫疄渚� - ca.setTime(date); //璁剧疆鏃堕棿涓哄綋鍓嶆椂闂� - int year = ca.get(Calendar.YEAR); - //System.out.println(month); - return year; - } - //鑾峰彇鏃堕棿鐨勬湀浠� - public static int getDateMonth(Date date){ - Calendar ca = Calendar.getInstance();//寰楀埌涓�涓狢alendar鐨勫疄渚� - ca.setTime(date); //璁剧疆鏃堕棿涓哄綋鍓嶆椂闂� - int month = ca.get(Calendar.MONTH) + 1; - //System.out.println(month); - return month; - } - //鑾峰彇鏃堕棿鐨勬棩鏈� - public static int getDateDay(Date date){ - Calendar ca = Calendar.getInstance();//寰楀埌涓�涓狢alendar鐨勫疄渚� - ca.setTime(date); //璁剧疆鏃堕棿涓哄綋鍓嶆椂闂� - int day = ca.get(Calendar.DAY_OF_MONTH); - //System.out.println(month); - return day; - } - //褰撳墠鏃堕棿鍔犱笂x灏忔椂 - public static Date getDateAdd(Date date,int minute){ - Calendar c = Calendar.getInstance(); - c.setTime(date); - c.add(Calendar.MINUTE, minute); - return c.getTime(); - } - - /*==========鏃堕棿鍒囧壊,鎸夊勾==========*/ /** * 鍦ㄥ垎琛ㄧ殑鎯呭喌涓嬩娇鐢�,鎸夊勾鍒嗚〃,鏌ヨ闇�瑕佸垏鍓叉煡璇娇鐢� 鏃堕棿鍊掑簭 * <p> @@ -147,7 +301,7 @@ * 鏍规嵁杩斿洖鐨勬渶鍚庝釜鏁版嵁,濡傛灉琛ㄥ瓨鍦�,鍒欐煡璇㈢瓫閫夋潯浠朵负<=杈撳叆鐨勭粓姝㈡椂闂�;涓嶅瓨鍦ㄥ垯寮冪敤杈撳叆鐨勭粓姝㈡椂闂� * 杩斿洖鐨勯潪绗竴鏈�鍚庢暟鎹�,鏌ヨ鍏ㄨ〃 */ - public static Map<String, List<Date>> getYearListDesc(Date startTime, Date endTime) throws ParseException { + public static Map<String,List<Date>> getYearListDesc(Date startTime,Date endTime) throws ParseException { Map<String,List<Date>> result = new LinkedHashMap<>(); Calendar startTimeC = Calendar.getInstance(); startTimeC.setTime(startTime); @@ -212,6 +366,94 @@ } /** + * 鍦ㄥ垎琛ㄧ殑鎯呭喌涓嬩娇鐢�,鎸夋湀鍒嗚〃,鏌ヨ闇�瑕佸垏鍓叉煡璇娇鐢� 鏃堕棿鍊掑簭 + * <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; + } + + /** * 鏌ヨ浣跨敤鏃�,闇�瑕佸鐞� 榛樿琛ㄦ煡璇㈢殑闂 鍊掑簭 * 绀轰緥: * <p> @@ -243,6 +485,42 @@ LinkedHashMap<String,List<Date>> yearTimeMap = (LinkedHashMap<String, List<Date>>) DateUtil.getYearListDesc(startTimeDate, endTimeDate); Map<String,List<Date>> yearTimeDescMap = new LinkedHashMap<>(); boolean existDefaultYear = false; + /*if(nowYear == beforeYear){ //榛樿琛ㄥ彧鏈夋湰骞村害鐨�(瓒呰繃浜嗗崐骞�,榛樿琛ㄨ褰曞叏閮ㄥ彧鏈夋湰骞村害鐨�,鍚屾椂浼氱敓鎴愪簡褰撳墠骞村害鐨勫垎琛�) + //濡傛灉鏌ヨ鏃堕棿鑼冨洿鍖呭惈褰撳墠骞村害,鍒欓渶瑕佹煡璇㈤粯璁よ〃 + if(startTime.get(Calendar.YEAR) >= nowYear && endTimeYear <= nowYear){ + //寮�濮嬫椂闂磋缃勾搴﹀垵濮嬫椂闂� + Calendar defaultTableStartTime = Calendar.getInstance(); + defaultTableStartTime.set(Calendar.YEAR,nowYear); + defaultTableStartTime.set(Calendar.MONTH,defaultTableStartTime.getActualMinimum(Calendar.MONTH)); + defaultTableStartTime.set(Calendar.DAY_OF_MONTH,defaultTableStartTime.getActualMinimum(Calendar.DAY_OF_MONTH)); + defaultTableStartTime.set(Calendar.HOUR_OF_DAY,defaultTableStartTime.getActualMinimum(Calendar.HOUR_OF_DAY)); + defaultTableStartTime.set(Calendar.MINUTE,defaultTableStartTime.getActualMinimum(Calendar.MINUTE)); + defaultTableStartTime.set(Calendar.SECOND,defaultTableStartTime.getActualMinimum(Calendar.SECOND)); + //缁堟鏃堕棿璁剧疆涓哄綋鍓嶆椂闂� + List<Date> defaultDateList = new LinkedList<>(); + //defaultDateList.add(defaultTableStartTime.getTime()); + defaultDateList.add(startTimeDate); + defaultDateList.add(endTimeDate); + + yearTimeMap.put("default",defaultDateList); + existDefaultYear = true; + + } + + }else{ //鏌ヨ鏃堕棿鑼冨洿涓嶅湪褰撳墠骞村害 + //榛樿琛ㄤ腑瀛樺湪涓婁竴骞村害鐨勮褰�.涓婁竴骞寸殑鏈�鏃╂椂闂翠负beforeYearTime-涓婁竴骞寸殑骞存湯 + //鍒ゆ柇鏌ヨ鏃堕棿鑼冨洿鏄惁鍖呭惈榛樿琛ㄤ腑涓婁竴骞村害鐨勬椂闂� + if(instance.getTime().compareTo(beforeYearTime)>0){ //鏌ヨ鏃堕棿澶т簬榛樿琛ㄤ腑涓婁竴骞村害鏃堕棿,璇存槑鏌ヨ璁板綍涔熷寘鍚湪榛樿琛ㄤ腑 + //璧峰鏃堕棿 + //缁堟鏃堕棿 + List<Date> defaultDateList = new LinkedList<>(); + defaultDateList.add(startTimeDate); + defaultDateList.add(endTimeDate); + + yearTimeMap.put("default",defaultDateList); + existDefaultYear = true; + } + }*/ if(startTimeDate.before(now.getTime()) || endTimeDate.after(timeBefore7Month.getTime())){ List<Date> defaultDateList = new LinkedList<>(); defaultDateList.add(startTimeDate); @@ -266,5 +544,121 @@ return yearTimeDescMap; } + /** + * 鎸夊勾鍒掑垎 + * 浼樺寲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