From 9d0dcb03fe11989b73036e6a457dc1949d847eba Mon Sep 17 00:00:00 2001 From: Lemon Date: Thu, 20 Jul 2023 16:50:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=20dateUtils=20=E6=A0=B9?= =?UTF-8?q?=E6=8D=AE=E4=BC=A0=E5=85=A5=E7=9A=84=E6=97=A5=E6=9C=9F,?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=97=B6=E9=97=B4=E5=8C=BA=E9=97=B4=E4=B8=AD?= =?UTF-8?q?=E6=89=80=E6=9C=89=E7=9A=84=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/jsowell/common/util/DateUtils.java | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java b/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java index 781f0b147..fdb220a61 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/DateUtils.java @@ -10,6 +10,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.management.ManagementFactory; +import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Instant; @@ -150,6 +151,11 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { } public static void main(String[] args) throws ParseException { + String startDate = "2023-07-01"; + String endDate = "2023-07-20"; + List list = getAllDatesInTheDateRange(startDate, endDate); + System.out.println(list); + // String str = "2023-01-07 11:17:12"; // Date date = parseDate(str); // String str1 = parseDateToStr(YYYY_MM_DD_HH_MM_SS, date); @@ -292,6 +298,26 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { return localDateTime2Date(localDateTime); } + /** + * 字符串转localDate + * @param dateStr 格式"yyyy-MM-dd" + * @return + */ + public static LocalDate dateStr2LocalDate(String dateStr) { + DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + return LocalDate.parse(dateStr, fmt); + } + + /** + * localDate转dateStr + * @param localDate + * @return 格式"yyyy-MM-dd" + */ + public static String localDate2DateStr(LocalDate localDate) { + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + return localDate.format(df); + } + /** * Date转LocalDateTime */ @@ -843,4 +869,70 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { } return false; } + + /** + * 根据传入的日期,获取时间区间中所有的日期 + * + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return java.util.List + * @since 2023-07-20 + */ + public static List getAllDatesInTheDateRange(LocalDate startDate, LocalDate endDate) { + List localDateList = new ArrayList<>(); + // 开始时间必须小于结束时间 + if (startDate.isAfter(endDate)) { + return null; + } + while (startDate.isBefore(endDate)) { + localDateList.add(startDate); + startDate = startDate.plusDays(1); + } + localDateList.add(endDate); + return localDateList; + } + + /** + * 根据传入的日期,获取时间区间中所有的日期 + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return java.util.List + */ + public static List getAllDatesInTheDateRange(String startDate, String endDate) { + // 判断传进来的日期格式 + if (judgeLegalDate(startDate) || judgeLegalDate(endDate)) { + return new ArrayList<>(); + } + List localDateList = getAllDatesInTheDateRange(dateStr2LocalDate(startDate), dateStr2LocalDate(endDate)); + if (CollectionUtils.isEmpty(localDateList)) { + return new ArrayList<>(); + } + List resultList = new ArrayList<>(); + localDateList.forEach(localDate -> { + String dateStr = localDate2DateStr(localDate); + resultList.add(dateStr); + }); + return resultList; + } + + /** + * 判断时间格式 格式必须为“YYYY-MM-dd” + * 2004-2-30 是无效的 + * 2003-2-29 是无效的 + * @param sDate + * @return + */ + private static boolean judgeLegalDate(String sDate) { + int legalLen = 10; + if ((sDate == null) || (sDate.length() != legalLen)) { + return true; + } + DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date date = formatter.parse(sDate); + return !sDate.equals(formatter.format(date)); + } catch (Exception e) { + return true; + } + } }