|  |  |  | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 将指定格式的字符串转换为日期型 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @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(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static int compareDate(String format, String str1, Date date2) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Date date1 = null; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | date1 = fromStringToDate(format, str1); | 
|---|
|  |  |  | } catch (ParseException e) { | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | // TODO 自动生成 catch 块 | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | // 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | return new Timestamp(System.currentTimeMillis()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public static Date getDateFromString2(String strDate) { | 
|---|
|  |  |  | if (StringUtils.isEmpty(strDate)) { | 
|---|
|  |  |  | return  null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | return sdfLongTimePlus.parse(strDate); | 
|---|
|  |  |  | } catch (Exception ex) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // ----------------------------------------------------------------------- | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | stringDate = getFomartDate(new Date(now), formate); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } catch (ParseException e) { | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | long now = date.getTime() + (long) Integer.parseInt(days) * DAY_IN_MILLISECOND; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | date = new Date(now); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } catch (ParseException e) { | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * 字符串形式转化为Date类型 String类型按照format格式转为Date类型 | 
|---|
|  |  |  | **/ | 
|---|
|  |  |  | public static Date fromStringToDate(String format, String dateTime) throws ParseException { | 
|---|
|  |  |  | public static Date fromStringToDate(String format, String dateTime)  { | 
|---|
|  |  |  | Date date = null; | 
|---|
|  |  |  | SimpleDateFormat sdf = new SimpleDateFormat(format); | 
|---|
|  |  |  | date = sdf.parse(dateTime); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | SimpleDateFormat sdf = new SimpleDateFormat(format); | 
|---|
|  |  |  | date = sdf.parse(dateTime); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return date; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static void main(String[] args) { | 
|---|
|  |  |  | 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(daysBetweenDates11(date1,date)+1); | 
|---|
|  |  |  | //            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)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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(); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public static String beforeDateToStr(Integer days){ | 
|---|
|  |  |  | Date date = new Date(); | 
|---|
|  |  |  | Long l = date.getTime()-1000*60*60*24*days; | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static Date afterMinutesDate(Integer minutes){ | 
|---|
|  |  |  | Date date = new Date(); | 
|---|
|  |  |  | Calendar cal = Calendar.getInstance(); | 
|---|
|  |  |  | cal.setTime(date); | 
|---|
|  |  |  | cal.add(Calendar.MINUTE,minutes); | 
|---|
|  |  |  | return cal.getTime(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * X 分钟后时间 | 
|---|
|  |  |  | * @param minutes | 
|---|
|  |  |  | * @return | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public static Date afterMinutesDate(Date date,Integer minutes){ | 
|---|
|  |  |  | Calendar cal = Calendar.getInstance(); | 
|---|
|  |  |  | cal.setTime(date); | 
|---|
|  |  |  | cal.add(Calendar.MINUTE,minutes); | 
|---|
|  |  |  | 
|---|
|  |  |  | 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(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|