|
@@ -1,6 +1,7 @@
|
|
|
package org.jeecg.modules.adweb.common.util;
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.commons.lang3.tuple.Pair;
|
|
|
|
|
@@ -25,47 +26,40 @@ import java.util.stream.IntStream;
|
|
|
@Slf4j
|
|
|
public class DateUtil {
|
|
|
|
|
|
- /**
|
|
|
- * 标准日期格式(yyyy-MM-dd)
|
|
|
- */
|
|
|
+ /** 标准日期格式(yyyy-MM-dd) */
|
|
|
public static final String DATE_FORMAT = "yyyy-MM-dd";
|
|
|
|
|
|
- /**
|
|
|
- * 标准时间格式(yyyy-MM-dd HH:mm:ss)
|
|
|
- */
|
|
|
+ /** 标准时间格式(yyyy-MM-dd HH:mm:ss) */
|
|
|
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
|
|
|
|
|
|
- /**
|
|
|
- * 带时区的时间格式(yyyy-MM-dd HH:mm:ss +00:00)
|
|
|
- */
|
|
|
+ /** 带时区的时间格式(yyyy-MM-dd HH:mm:ss +00:00) */
|
|
|
public static final String ZONED_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss X";
|
|
|
|
|
|
- /**
|
|
|
- * 时间格式(yyyy/MM/dd)
|
|
|
- */
|
|
|
+ /** 时间格式(yyyy/MM/dd) */
|
|
|
public static final String SUBJECT_DATE_FORMAT = "yyyy/MM/dd";
|
|
|
|
|
|
- /**
|
|
|
- * 时间格式(yyyyMMdd)
|
|
|
- */
|
|
|
+ /** 时间格式(yyyyMMdd) */
|
|
|
public static final String COMPACT_DATE_FORMAT = "yyyyMMdd";
|
|
|
|
|
|
- /**
|
|
|
- * 时间格式(yyyyMMddHHmmss)
|
|
|
- */
|
|
|
+ /** 时间格式(yyyyMMddHHmmss) */
|
|
|
public static final String COMPACT_DATE_TIME_FORMAT = "yyyyMMddHHmmss";
|
|
|
|
|
|
- /**
|
|
|
- * 带分钟的事件格式
|
|
|
- * yyyy-MM-dd HH:mm
|
|
|
- */
|
|
|
+ /** 带分钟的事件格式 yyyy-MM-dd HH:mm */
|
|
|
public static final String DATE_FORMAT_MINUTE = "yyyy-MM-dd HH:mm";
|
|
|
|
|
|
public static final ZoneId DEFAULT_ZONE_ID = ZoneId.of("Asia/Shanghai");
|
|
|
|
|
|
- /**
|
|
|
- * 取得系统当前日期
|
|
|
- */
|
|
|
+ /* 日期类型, {@link #getDateRangeByType(String)}方法参数 */
|
|
|
+ public static final String DATE_TYPE_TODAY = "today";
|
|
|
+ public static final String DATE_TYPE_YESTERDAY = "yesterday";
|
|
|
+ public static final String DATE_TYPE_SEVEN_DAYS = "sevenDay";
|
|
|
+ public static final String DATE_TYPE_THIRTY_DAYS = "thirtyDay";
|
|
|
+ public static final String DATE_TYPE_THIS_WEEK = "thisWeek";
|
|
|
+ public static final String DATE_TYPE_LAST_WEEK = "lastWeek";
|
|
|
+ public static final String DATE_TYPE_THIS_MONTH = "thisMonth";
|
|
|
+ public static final String DATE_TYPE_LAST_MONTH = "lastMonth";
|
|
|
+
|
|
|
+ /** 取得系统当前日期 */
|
|
|
public static Date getDate() {
|
|
|
return new Date();
|
|
|
}
|
|
@@ -79,26 +73,51 @@ public class DateUtil {
|
|
|
*/
|
|
|
public static Pair<Date, Date> getDateRangeByType(String dateType) {
|
|
|
Date now = new Date();
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+
|
|
|
Date start = null;
|
|
|
Date end = null;
|
|
|
|
|
|
switch (dateType) {
|
|
|
- case "yesterday":
|
|
|
- start = getTodayZeroTime(DateUtil.addDays(now, -1));
|
|
|
+ case DATE_TYPE_TODAY:
|
|
|
+ start = getTodayZeroTime(now);
|
|
|
end = start;
|
|
|
break;
|
|
|
- case "today":
|
|
|
- start = getTodayZeroTime(now);
|
|
|
+ case DATE_TYPE_YESTERDAY:
|
|
|
+ start = getTodayZeroTime(DateUtil.addDays(now, -1));
|
|
|
end = start;
|
|
|
break;
|
|
|
- case "sevenDay":
|
|
|
+ case DATE_TYPE_SEVEN_DAYS:
|
|
|
end = getTodayZeroTime(now);
|
|
|
start = addDays(end, -6);
|
|
|
break;
|
|
|
- case "thirtyDay":
|
|
|
+ case DATE_TYPE_THIRTY_DAYS:
|
|
|
end = getTodayZeroTime(now);
|
|
|
start = addDays(end, -29);
|
|
|
break;
|
|
|
+ case DATE_TYPE_THIS_WEEK:
|
|
|
+ calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
|
|
|
+ start = getTodayZeroTime(calendar.getTime());
|
|
|
+ end = getTodayZeroTime(now);
|
|
|
+ break;
|
|
|
+ case DATE_TYPE_LAST_WEEK:
|
|
|
+ calendar.add(Calendar.DAY_OF_YEAR, -7);
|
|
|
+ calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
|
|
|
+ start = getTodayZeroTime(calendar.getTime());
|
|
|
+ end = addDays(start, 6);
|
|
|
+ break;
|
|
|
+ case DATE_TYPE_THIS_MONTH:
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
+ start = getTodayZeroTime(calendar.getTime());
|
|
|
+ end = getTodayZeroTime(now);
|
|
|
+ break;
|
|
|
+ case DATE_TYPE_LAST_MONTH:
|
|
|
+ calendar.add(Calendar.MONTH, -1);
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
+ start = getTodayZeroTime(calendar.getTime());
|
|
|
+ calendar.set(
|
|
|
+ Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
|
|
+ end = getTodayZeroTime(calendar.getTime());
|
|
|
default:
|
|
|
// e.g. dateType = 7
|
|
|
if (StringUtils.isNumeric(dateType)) {
|
|
@@ -146,7 +165,7 @@ public class DateUtil {
|
|
|
/**
|
|
|
* 在当前日期上追加N天
|
|
|
*
|
|
|
- * @param date 当前日期
|
|
|
+ * @param date 当前日期
|
|
|
* @param daysToAdd 添加天数
|
|
|
* @return 日期字符串形式
|
|
|
*/
|
|
@@ -161,7 +180,7 @@ public class DateUtil {
|
|
|
* 在当前日期上追加N年
|
|
|
*
|
|
|
* @param date 当前日期
|
|
|
- * @param num 添加年数
|
|
|
+ * @param num 添加年数
|
|
|
* @return 日期字符串形式
|
|
|
*/
|
|
|
public static Date addYear(Date date, int num) {
|
|
@@ -185,9 +204,7 @@ public class DateUtil {
|
|
|
LocalDate.ofInstant(end.toInstant(), DEFAULT_ZONE_ID));
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取start和end之间所有的日期,包含起止两端
|
|
|
- */
|
|
|
+ /** 获取start和end之间所有的日期,包含起止两端 */
|
|
|
public static List<Date> getAllDaysBetween(Date start, Date end) {
|
|
|
return IntStream.rangeClosed(0, diffDays(start, end))
|
|
|
.mapToObj(diff -> addDays(start, diff))
|