|  |  | 
 |  |  | import java.text.ParseException; | 
 |  |  | import java.text.SimpleDateFormat; | 
 |  |  | import java.time.*; | 
 |  |  | import java.time.format.DateTimeFormatter; | 
 |  |  | import java.time.temporal.ChronoUnit; | 
 |  |  | import java.time.temporal.TemporalAdjusters; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.Date; | 
 |  |  |  | 
 |  |  | import cn.hutool.core.date.DateUnit; | 
 |  |  | import org.apache.commons.lang3.RandomStringUtils; | 
 |  |  | import org.apache.commons.lang3.StringUtils; | 
 |  |  |  | 
 |  |  | 
 |  |  |                 date = date.substring(0,i); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         //TimeZone tz = TimeZone.getTimeZone("GMT-01"); | 
 |  |  |         //TimeZone tz = TimeZone.getTimeZone("GMT-01");2024-10-21T10:40:04+08:00 | 
 |  |  |         DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); | 
 |  |  | //        DateFormat df = new SimpleDateFormat("2023-12-08 T 09:25:54.698+08:00"); | 
 |  |  |         df.setTimeZone(tz); | 
 |  |  | 
 |  |  |             e.printStackTrace(); | 
 |  |  |             return (date == null) ? new Date().toString() : date.toString(); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 获取X月份之前的月份数 | 
 |  |  |      * @param currentDate | 
 |  |  |      * @param month | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public static List<String> getBeforMonth(Date currentDate , Integer month) { | 
 |  |  |         SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); | 
 |  |  |         SimpleDateFormat sdfMonth = new SimpleDateFormat("MM"); | 
 |  |  |         int currentYear = Integer.parseInt(sdfYear.format(currentDate)); | 
 |  |  |         int currentMonth = Integer.parseInt(sdfMonth.format(currentDate)); | 
 |  |  |         List<String> list = new ArrayList<>(); | 
 |  |  |  | 
 |  |  |         for (int i = 0; i < month; i++) { | 
 |  |  |             int tempYear = currentYear; | 
 |  |  |             int tempMonth = currentMonth - i; | 
 |  |  |  | 
 |  |  |             if (tempMonth <= 0) { | 
 |  |  |                 tempYear--; | 
 |  |  |                 tempMonth += 12; | 
 |  |  |             } | 
 |  |  |             list.add(tempYear +"-" + StringUtils.leftPad(Integer.toString(tempMonth),2,"0")); | 
 |  |  |         } | 
 |  |  |         return list; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public static List<String> getBeforDays(Date currentDate,Integer days){ | 
 |  |  |         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); | 
 |  |  |         Calendar calendar = Calendar.getInstance(); | 
 |  |  |         calendar.setTime(currentDate); | 
 |  |  |         Date endDate = currentDate; // 获取当前日期 | 
 |  |  |         calendar.add(Calendar.DAY_OF_YEAR, -days); // 往前推7天 | 
 |  |  |         Date startDate = calendar.getTime(); // 获取推算后的日期 | 
 |  |  |         List<String> list = new ArrayList<>(); | 
 |  |  |         while (startDate.before(endDate)) { | 
 |  |  |             calendar.add(Calendar.DAY_OF_YEAR, 1); // 获取下一天日期 | 
 |  |  |             startDate = calendar.getTime(); | 
 |  |  |             list.add(DateUtil.dateToString(startDate,"yyyy-MM-dd")); | 
 |  |  |             System.out.println(DateUtil.dateToString(startDate,"yyyy-MM-dd")); | 
 |  |  |         } | 
 |  |  |         return list; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 将指定格式的字符串转换为日期型 | 
 |  |  |      * | 
 |  |  |      * @param strDate | 
 |  |  |      *            - 日期 | 
 |  |  |      * @param oracleFormat | 
 |  |  |      *            --oracle型日期格式 | 
 |  |  |      * @return 转换得到的日期 | 
 |  |  |      */ | 
 |  |  |     @SuppressWarnings("unchecked") | 
 |  |  |     public static Date stringToDate(String strDate, String oracleFormat) { | 
 |  |  |         if (strDate == null) | 
 |  |  |             return null; | 
 |  |  |         Hashtable<Integer, String> h = new Hashtable<Integer, String>(); | 
 |  |  |         String javaFormat = new String(); | 
 |  |  |         String s = oracleFormat.toLowerCase(); | 
 |  |  |         if (s.indexOf("yyyy") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("yyyy")), "yyyy"); | 
 |  |  |         else if (s.indexOf("yy") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("yy")), "yy"); | 
 |  |  |         if (s.indexOf("mm") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("mm")), "MM"); | 
 |  |  |  | 
 |  |  |         if (s.indexOf("dd") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("dd")), "dd"); | 
 |  |  |         if (s.indexOf("hh24") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("hh24")), "HH"); | 
 |  |  |         if (s.indexOf("mi") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("mi")), "mm"); | 
 |  |  |         if (s.indexOf("ss") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("ss")), "ss"); | 
 |  |  |  | 
 |  |  |         int intStart = 0; | 
 |  |  |         while (s.indexOf("-", intStart) != -1) { | 
 |  |  |             intStart = s.indexOf("-", intStart); | 
 |  |  |             h.put(new Integer(intStart), "-"); | 
 |  |  |             intStart++; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         intStart = 0; | 
 |  |  |         while (s.indexOf("/", intStart) != -1) { | 
 |  |  |             intStart = s.indexOf("/", intStart); | 
 |  |  |             h.put(new Integer(intStart), "/"); | 
 |  |  |             intStart++; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         intStart = 0; | 
 |  |  |         while (s.indexOf(" ", intStart) != -1) { | 
 |  |  |             intStart = s.indexOf(" ", intStart); | 
 |  |  |             h.put(new Integer(intStart), " "); | 
 |  |  |             intStart++; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         intStart = 0; | 
 |  |  |         while (s.indexOf(":", intStart) != -1) { | 
 |  |  |             intStart = s.indexOf(":", intStart); | 
 |  |  |             h.put(new Integer(intStart), ":"); | 
 |  |  |             intStart++; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if (s.indexOf("年") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("年")), "年"); | 
 |  |  |         if (s.indexOf("月") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("月")), "月"); | 
 |  |  |         if (s.indexOf("日") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("日")), "日"); | 
 |  |  |         if (s.indexOf("时") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("时")), "时"); | 
 |  |  |         if (s.indexOf("分") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("分")), "分"); | 
 |  |  |         if (s.indexOf("秒") != -1) | 
 |  |  |             h.put(new Integer(s.indexOf("秒")), "秒"); | 
 |  |  |  | 
 |  |  |         int i = 0; | 
 |  |  |         while (h.size() != 0) { | 
 |  |  |             Enumeration e = h.keys(); | 
 |  |  |             int n = 0; | 
 |  |  |             while (e.hasMoreElements()) { | 
 |  |  |                 i = ((Integer) e.nextElement()).intValue(); | 
 |  |  |                 if (i >= n) | 
 |  |  |                     n = i; | 
 |  |  |             } | 
 |  |  |             String temp = (String) h.get(new Integer(n)); | 
 |  |  |             h.remove(new Integer(n)); | 
 |  |  |  | 
 |  |  |             javaFormat = temp + javaFormat; | 
 |  |  |         } | 
 |  |  |         SimpleDateFormat df = new SimpleDateFormat(javaFormat); | 
 |  |  |  | 
 |  |  |         Date myDate = new Date(); | 
 |  |  |         try { | 
 |  |  |             myDate = df.parse(strDate); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             // e.printStackTrace(); | 
 |  |  |             return null; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         return myDate; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public static Date StringToDate(String DATE1) { | 
 |  |  |         DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | 
 |  |  | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return length; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 得到X分钟后的时间(时间格式) | 
 |  |  |      * | 
 |  |  |      * @param date | 
 |  |  |      * @param minute | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public static Date getXMinuteAfterDate(Date date, int minute) { | 
 |  |  |         Calendar now = Calendar.getInstance(); | 
 |  |  |         now.setTime(date); | 
 |  |  |         now.set(Calendar.MINUTE, now.get(Calendar.MINUTE) + minute); | 
 |  |  |         return now.getTime(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |     // StringUtil.getNotNullStr(request.getParameter(strParamName)); | 
 |  |  |     // return getDateByString(strStr); | 
 |  |  |     // } | 
 |  |  |     /** | 
 |  |  |      * 得到当前日期,格式yyyy-MM-dd。 | 
 |  |  |      * | 
 |  |  |      * @return String 格式化的日期字符串 | 
 |  |  |      */ | 
 |  |  |     public static String getCurrDate() { | 
 |  |  |         return getFormattedDate(getDateByString("")); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 得到当前日期,格式yyyy-MM-dd。 | 
 |  |  | 
 |  |  |     public static String getCurrDateTime() { | 
 |  |  |         Timestamp date = new Timestamp(System.currentTimeMillis()); | 
 |  |  |         SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); | 
 |  |  |         return formatter.format(date); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 得到当前日期时间,格式为yyyy-MM-dd. | 
 |  |  |      * | 
 |  |  |      * @return String | 
 |  |  |      */ | 
 |  |  |     public static String getCurrDate() { | 
 |  |  |         Timestamp date = new Timestamp(System.currentTimeMillis()); | 
 |  |  |         SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); | 
 |  |  |         return formatter.format(date); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         try { | 
 |  |  | //            Date date = getISO8601DateByStr("2024-04-15T07:46:36.014+08:00"); | 
 |  |  | //            Date date1 = getISO8601DateByStr("2024-06-14T08:46:36.014+08:00"); | 
 |  |  |             System.out.println(DateUtil.afterMinutesDate(-5)); | 
 |  |  | //            System.out.println(DateUtil.afterMinutesDate(-5)); | 
 |  |  |  | 
 |  |  |  | 
 |  |  |             DateUtil.getBeforDays(new Date(),7); | 
 |  |  |  | 
 |  |  | //            Date startTime = DateUtil.StringToDate("2024-05-01 08:00:00" ,"yyyy-MM-dd HH:mm:ss"); | 
 |  |  | //            Date endTime = DateUtil.StringToDate("2024-05-01 17:00:00" ,"yyyy-MM-dd HH:mm:ss"); | 
 |  |  | //            Long intervalTime = 35L; | 
 |  |  | // | 
 |  |  | // | 
 |  |  | //            DateUtil.checkDateInterval( startTime.toInstant() | 
 |  |  | //                    .atZone(ZoneId.systemDefault()) | 
 |  |  | //                    .toLocalDateTime(), endTime.toInstant() | 
 |  |  | //                    .atZone(ZoneId.systemDefault()) | 
 |  |  | //                    .toLocalDateTime(),intervalTime); | 
 |  |  |  | 
 |  |  |         } catch (Exception ex) { | 
 |  |  |             ex.printStackTrace(); | 
 |  |  | 
 |  |  |     public static String afterDateToStr(Integer days){ | 
 |  |  |         Date date = new Date(); | 
 |  |  |         Long l = date.getTime()+1000*60*60*24*days; | 
 |  |  |         date.setTime(l); | 
 |  |  |         return DateToStr(date, "yyyyMMdd"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public static String afterDateHourToStr(Integer hour){ | 
 |  |  |         Date date = new Date(); | 
 |  |  |         Long l = date.getTime()+1000*60*60*hour; | 
 |  |  |         date.setTime(l); | 
 |  |  |         return DateToStr(date, "yyyyMMdd"); | 
 |  |  |     } | 
 |  |  | 
 |  |  |         System.out.println(time); | 
 |  |  |         return time; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     public static List<LocalDateTime> checkDateInterval(LocalDateTime localStartTime,LocalDateTime localEndTime,Long interval){ | 
 |  |  |         List<LocalDateTime> segments = new ArrayList<>(); | 
 |  |  |         LocalDateTime current = localStartTime; | 
 |  |  |         while (current.isBefore(localEndTime)) { | 
 |  |  |             segments.add(current); | 
 |  |  |             current = current.plus(interval, ChronoUnit.MINUTES); | 
 |  |  |         } | 
 |  |  |         return segments; | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 获取X天后的日期 | 
 |  |  |      * @param date | 
 |  |  |      * @param beforDays 明天 -1  昨天 1 | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public static String getBeforDay(Date date,Integer beforDays){ | 
 |  |  |         ZonedDateTime zonedDateTime = date.toInstant().atZone(ZoneId.systemDefault()); | 
 |  |  |         // 转换为java.time.LocalDate,计算x天的日期 | 
 |  |  |         LocalDate dateBeforeDay = zonedDateTime.toLocalDate().minusDays(beforDays); | 
 |  |  |         return dateBeforeDay.toString(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  | } |