lengfaqiang 2 лет назад
Родитель
Сommit
1949b58171

+ 199 - 30
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/DateUtil.java

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.utils.StringUtils;
+import org.springframework.util.Assert;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -75,6 +76,12 @@ public class DateUtil {
         return format;
     }
 
+    public static LocalDate localDateToLocalDate(LocalDate date) {
+        String str = dateToStr(date, "yyyy-MM-dd") + " 23:59:59";
+//        LocalDate localDate = parseLocalDate(str);
+        LocalDate localDate = LocalDate.parse(str, YYYY_MM_DD_HH_MM_SS);
+        return localDate;
+    }
 
     public static String dateToStr(LocalDate date) {
         return dateToStr(date, "yyyy-MM-dd");
@@ -167,6 +174,52 @@ public class DateUtil {
     }
 
 
+    /**
+     * 上个月
+     *
+     * @return 上个月
+     */
+    public static DateTime lastMonth(int offset) {
+        return offsetMonth(new DateTime(), -offset);
+    }
+
+    /**
+     * 偏移月
+     *
+     * @param date   日期
+     * @param offset 偏移月数,正数向未来偏移,负数向历史偏移
+     * @return 偏移后的日期
+     */
+    public static DateTime offsetMonth(Date date, int offset) {
+        return offset(date, DateField.MONTH, offset);
+    }
+
+    /**
+     * 获取指定日期偏移指定时间后的时间,生成的偏移日期不影响原日期
+     *
+     * @param date      基准日期
+     * @param dateField 偏移的粒度大小(小时、天、月等){@link DateField}
+     * @param offset    偏移量,正数为向后偏移,负数为向前偏移
+     * @return 偏移后的日期
+     */
+    public static DateTime offset(Date date, DateField dateField, int offset) {
+        return dateNew(date).offset(dateField, offset);
+    }
+
+    /**
+     * 根据已有{@link Date} 产生新的{@link DateTime}对象
+     *
+     * @param date Date对象,如果传入{@code null},返回{@code null}
+     * @return {@link DateTime}对象
+     * @since 4.3.1
+     */
+    public static DateTime dateNew(Date date) {
+        if (date == null) {
+            return null;
+        }
+        return new DateTime(date);
+    }
+
     /**
      * @param time yyyy-MM-dd
      * @return String yyyy-MM-dd HH:mm:ss
@@ -189,6 +242,7 @@ public class DateUtil {
 
     /**
      * 获取上周和上上周的开始时间和结束时间
+     *
      * @return
      */
     private static Map<String, String> getLastWeekTime() {
@@ -221,21 +275,21 @@ public class DateUtil {
     }
 
 
-    private static Map<String, String>  getRealizeLastWeekTime(int upLastStartOffset,int upLastEndOffset,int lastStartOffset,int lastEndOffset) {
+    private static Map<String, String> getRealizeLastWeekTime(int upLastStartOffset, int upLastEndOffset, int lastStartOffset, int lastEndOffset) {
         // 获取上上周的开始时间和结束时间
         String startUpLastWeekTime = DateTime.now().offset(DateField.DAY_OF_YEAR, upLastStartOffset)
-                .setField(DateField.HOUR_OF_DAY,0).setField(DateField.MINUTE,0)
-                .setField(DateField.SECOND,0).setField(DateField.MILLISECOND,0).toString();
+                .setField(DateField.HOUR_OF_DAY, 0).setField(DateField.MINUTE, 0)
+                .setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0).toString();
         String endUpLastWeekTime = DateTime.now().offset(DateField.DAY_OF_YEAR, upLastEndOffset)
-                .setField(DateField.HOUR_OF_DAY,23).setField(DateField.MINUTE,59)
-                .setField(DateField.SECOND,59).setField(DateField.MILLISECOND,0).toString();
+                .setField(DateField.HOUR_OF_DAY, 23).setField(DateField.MINUTE, 59)
+                .setField(DateField.SECOND, 59).setField(DateField.MILLISECOND, 0).toString();
         // 获取上周的开始时间和结束时间
         String startLastWeekTime = DateTime.now().offset(DateField.DAY_OF_YEAR, lastStartOffset)
-                .setField(DateField.HOUR_OF_DAY,0).setField(DateField.MINUTE,0)
-                .setField(DateField.SECOND,0).setField(DateField.MILLISECOND,0).toString();
+                .setField(DateField.HOUR_OF_DAY, 0).setField(DateField.MINUTE, 0)
+                .setField(DateField.SECOND, 0).setField(DateField.MILLISECOND, 0).toString();
         String endLastWeekTime = DateTime.now().offset(DateField.DAY_OF_YEAR, lastEndOffset)
-                .setField(DateField.HOUR_OF_DAY,23).setField(DateField.MINUTE,59)
-                .setField(DateField.SECOND,59).setField(DateField.MILLISECOND,0).toString();
+                .setField(DateField.HOUR_OF_DAY, 23).setField(DateField.MINUTE, 59)
+                .setField(DateField.SECOND, 59).setField(DateField.MILLISECOND, 0).toString();
         Map<String, String> maps = new HashMap();
         maps.put("startUpLastWeekTime", startUpLastWeekTime);
         maps.put("endUpLastWeekTime", endUpLastWeekTime);
@@ -243,6 +297,7 @@ public class DateUtil {
         maps.put("endLastWeekTime", endLastWeekTime);
         return maps;
     }
+
     /**
      * yyyy-MM-dd 转换成 Date
      *
@@ -391,6 +446,11 @@ public class DateUtil {
         return LocalDateTime.parse(time, YYYY_MM_DD_HH_MM_SS);
     }
 
+    public static LocalDate parseLocalDate(String time) {
+        return LocalDate.parse(time, YYYY_MM_DD_HH_MM_SS);
+    }
+
+
     public static LocalDate parseDate(long time) {
         return LocalDate.from(parseDateTime(time));
     }
@@ -461,7 +521,9 @@ public class DateUtil {
         return date;
     }
 
-    public static void main(String[] args) {
+    public static void main(String[] args) throws ParseException {
+        String lastTwoMonthDate = getLastTwoMonthDateStart();
+        String lastTwoMonthDateEnd = getLastTwoMonthDateEnd();
 //        String s = "2023-12-12";
 //        Date date = DateUtil.stringPatchingStartToDateTime(s);
 //        Date date1 = DateUtil.stringPatchingEndToDateTime(s);
@@ -471,10 +533,31 @@ public class DateUtil {
 //        String lastWeekDateEnd = getLastWeekDateEnd();
 //        System.out.println(lastWeekDateStart);
 //        System.out.println(lastWeekDateEnd);
-        String beforeWeekDate = DateUtil.getBeforeWeekDate(6)+" 00:00:00";
-        String beforeWeekDate1 = DateUtil.getBeforeWeekDate(7)+" 23:59:59";;
-        System.out.println(beforeWeekDate);
-        System.out.println(beforeWeekDate1);
+//        String beforeWeekDate = DateUtil.getBeforeWeekDate(6) + " 00:00:00";
+//        String beforeWeekDate1 = DateUtil.getBeforeWeekDate(7) + " 23:59:59";
+//        ;
+//        System.out.println(beforeWeekDate);
+//        System.out.println(beforeWeekDate1);
+//        DateTime dateTime = lastMonth();
+//        System.out.println(dateTime);
+
+//        // 获取当前日期
+//        LocalDate currentDate = LocalDate.now();
+//        // 计算一年前的日期
+//        LocalDate oneYearAgo = currentDate.minusYears(1);
+//        LocalDateTime localDateTime = oneYearAgo.atStartOfDay();
+//        System.out.println(localDateTime);
+//        LocalDateTime beforeWeekDateEnd = getBeforeWeekDateEnd(6);
+//        System.out.println(beforeWeekDateEnd);
+        String format = LocalDateTime.now().format(DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN));
+        System.out.println(format);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN);
+        LocalDateTime parse = LocalDateTime.parse(format, formatter);
+        System.out.println(parse);
+        LocalDateTime lastWeekDateStart = getLastWeekDateStart(6);
+        System.out.println(lastWeekDateStart);
+        LocalDateTime lastWeekDateEnd = getLastWeekDateEnd(6);
+        System.out.println(lastWeekDateEnd);
 
     }
 
@@ -651,31 +734,61 @@ public class DateUtil {
     }
 
     /**
-     * 当前时间的前一个星期
+     * 当前时间的前一个星期[传递6即为一周]
      *
-     * @return
+     * @return 2023-09-12 00:00:00
+     */
+    public static LocalDateTime getLastWeekDateStart(long amount) {
+//        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+//        Calendar c = Calendar.getInstance();
+//        c.add(Calendar.DAY_OF_MONTH, -6);
+//        String start = format.format(c.getTime()) + " 00:00:00";
+//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN);
+//        LocalDateTime localDateTime = LocalDateTime.parse(start, formatter);
+        LocalDateTime localDateTime = LocalDate.now().minusDays(amount).atStartOfDay();
+        return localDateTime;
+    }
+
+
+    /**
+     * 当前时间的前一个星期 [传递6即为一周]
+     *
+     * @return 2023-09-12 23:59:59
      */
-    public static String getLastWeekDateStart() {
+    public static LocalDateTime getLastWeekDateEnd(int amount) {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         Calendar c = Calendar.getInstance();
-        c.add(Calendar.DAY_OF_MONTH, -6);
-        String start = format.format(c.getTime()) + " 00:00:00";
-//        System.out.println(start);
+        c.add(Calendar.DAY_OF_MONTH, -amount);
+        String start = format.format(c.getTime()) + " 23:59:59";
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DEFAULT_DATE_PATTERN);
+        LocalDateTime parse = LocalDateTime.parse(start, formatter);
+        return parse;
+    }
+
+    /**
+     * 当前时间的前一个星期
+     *
+     * @return
+     */
+    public static String getLastDateStart(Integer type) {
+        Assert.notNull(type, "获取上周/月结束时间,日期类型参数缺失");
+        int days = Objects.equals(type, 1) ? 6 : 29;
+        String start = LocalDate.now().atStartOfDay().minusDays(days).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
         return start;
     }
 
 
     /**
-     * 当前时间的前一个星期
+     * 获取当前日期之前的时间
      *
+     * @param amount 往前推多久时间[天为单位]
      * @return
      */
-    public static String getLastWeekDateEnd() {
+    public static String getBeforeWeekDate(int amount) {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         Calendar c = Calendar.getInstance();
-        c.add(Calendar.DAY_OF_MONTH, -6);
-        String start = format.format(c.getTime()) + " 23:59:59";
-//        System.out.println(start);
+        c.add(Calendar.DAY_OF_MONTH, -amount);
+        String start = format.format(c.getTime());
         return start;
     }
 
@@ -685,14 +798,29 @@ public class DateUtil {
      * @param amount 往前推多久时间[天为单位]
      * @return
      */
-    public static String getBeforeWeekDate(int amount) {
+    public static String getBeforeWeekDateStart(int amount) {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         Calendar c = Calendar.getInstance();
         c.add(Calendar.DAY_OF_MONTH, -amount);
-        String start = format.format(c.getTime());
+        String start = format.format(c.getTime()) + " 00:00:00";
         return start;
     }
 
+    /**
+     * 获取当前日期之前的时间
+     *
+     * @param amount 往前推多久时间[天为单位]
+     * @return
+     */
+    public static LocalDateTime getBeforeWeekDateEnd(int amount) {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar c = Calendar.getInstance();
+        c.add(Calendar.DAY_OF_MONTH, -amount);
+        String start = format.format(c.getTime()) + " 23:59:59";
+        LocalDateTime parse = LocalDateTime.parse(start);
+        return parse;
+    }
+
 
     /**
      * 当天日期前一个月
@@ -709,6 +837,34 @@ public class DateUtil {
     }
 
 
+    /**
+     * 当天日期前一个月
+     *
+     * @return 2023-09-06 00:00:00
+     */
+    public static String getLastMonthDateStart() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar c = Calendar.getInstance();
+        c.add(Calendar.MONTH, -1);
+        String start = format.format(c.getTime())+" 00:00:00";
+        System.out.println(start);
+        return start;
+    }
+
+    /**
+     * 当天日期前一个月
+     *
+     * @return 2023-09-06 23:59:59
+     */
+    public static String getLastMonthDateEnd() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar c = Calendar.getInstance();
+        c.add(Calendar.MONTH, -1);
+        String start = format.format(c.getTime())+" 23:59:59";
+        return start;
+    }
+
+
     /**
      * 获取当前日期之前的时间
      *
@@ -729,13 +885,26 @@ public class DateUtil {
      *
      * @return
      */
-    public static String getLastMonthDate1() {
+    public static String getLastTwoMonthDateStart() {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Calendar c = Calendar.getInstance();
-        c.setTime(strDateTimeToDateTime(getLastMonthDate()));
+        c.setTime(strDateTimeToDateTime(getLastMonthDateStart()));
+        c.add(Calendar.MONTH, -1);
+        String start = format.format(c.getTime());
+        return start;
+    }
+
+    /**
+     * 当天日期前两个月
+     *
+     * @return
+     */
+    public static String getLastTwoMonthDateEnd() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Calendar c = Calendar.getInstance();
+        c.setTime(strDateTimeToDateTime(getLastMonthDateEnd()));
         c.add(Calendar.MONTH, -1);
         String start = format.format(c.getTime());
-        System.out.println(start);
         return start;
     }