|
|
@@ -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;
|
|
|
}
|
|
|
|