package com.sinata.common.enums;
|
|
import cn.hutool.core.date.DateField;
|
import cn.hutool.core.date.DateUtil;
|
import lombok.AllArgsConstructor;
|
import lombok.Getter;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* 时间跨度枚举
|
*
|
* @author frankevil
|
* @date 2023/3/28 23:43
|
**/
|
@AllArgsConstructor
|
@Getter
|
public enum TimeSpanEnum {
|
/**
|
* 时间跨度
|
*/
|
TO_DAY("今天", SplitTypeEnum.DAY),
|
DAY_7("7天", SplitTypeEnum.DAY),
|
DAY_30("30天", SplitTypeEnum.DAY),
|
THIS_MONTH("本月", SplitTypeEnum.DAY),
|
MONTH_3("近3个月", SplitTypeEnum.MONTH),
|
THIS_QUARTERLY("本季度", SplitTypeEnum.MONTH),
|
QUARTERLY_1("-季度", SplitTypeEnum.MONTH),
|
QUARTERLY_2("二季度", SplitTypeEnum.MONTH),
|
QUARTERLY_3("三季度", SplitTypeEnum.MONTH),
|
QUARTERLY_4("四季度", SplitTypeEnum.MONTH),
|
MONTH_12("近12月", SplitTypeEnum.MONTH),
|
THIS_YEAR("本年", SplitTypeEnum.MONTH),
|
;
|
|
private final String name;
|
|
private final SplitTypeEnum splitType;
|
|
@AllArgsConstructor
|
@Getter
|
public enum SplitTypeEnum {
|
/**
|
* 类型
|
*/
|
DAY("天", 1, DateField.DAY_OF_YEAR, "YYYY-MM-dd", "%Y-%m-%d"),
|
MONTH("月", 1, DateField.MONTH, "YYYY-MM", "%Y-%m"),
|
YEAR("年", 1, DateField.YEAR, "YYYY", "%Y"),
|
;
|
|
private final String name;
|
/**
|
* 步长
|
*/
|
private final int step;
|
/**
|
* 单位
|
*/
|
private final DateField dateField;
|
/**
|
* 时间显示格式
|
*/
|
private final String format;
|
|
/**
|
* 数据库时间格式
|
*/
|
private final String sqlFormat;
|
}
|
|
|
/**
|
* 获取时间范围 [0]开始 [1]结束
|
*
|
* @param timeSpan
|
* @return
|
*/
|
public static Date[] getTimeSpan(TimeSpanEnum timeSpan) {
|
Date[] result = new Date[2];
|
Date now = new Date();
|
switch (timeSpan) {
|
case TO_DAY:
|
result[0] = DateUtil.beginOfDay(now);
|
result[1] = DateUtil.endOfDay(now);
|
break;
|
case DAY_7:
|
result[1] = DateUtil.endOfDay(now);
|
result[0] = DateUtil.offsetDay(result[1], -7);
|
break;
|
case DAY_30:
|
result[1] = DateUtil.endOfDay(now);
|
result[0] = DateUtil.offsetDay(result[1], -30);
|
break;
|
case THIS_MONTH:
|
result[0] = DateUtil.beginOfMonth(now);
|
result[1] = DateUtil.endOfMonth(now);
|
break;
|
case MONTH_3:
|
result[1] = DateUtil.endOfDay(now);
|
result[0] = DateUtil.offsetMonth(result[1], -3);
|
break;
|
case THIS_QUARTERLY:
|
result[0] = DateUtil.beginOfQuarter(now);
|
result[1] = DateUtil.endOfQuarter(now);
|
break;
|
case QUARTERLY_1:
|
result[0] = DateUtil.beginOfYear(now);
|
result[1] = DateUtil.endOfMonth(DateUtil.offsetMonth(result[0], 2));
|
break;
|
case QUARTERLY_2:
|
result[0] = DateUtil.offsetMonth(DateUtil.beginOfYear(now), 3);
|
result[1] = DateUtil.endOfMonth(DateUtil.offsetMonth(result[0], 2));
|
break;
|
case QUARTERLY_3:
|
result[0] = DateUtil.offsetMonth(DateUtil.beginOfYear(now), 6);
|
result[1] = DateUtil.endOfMonth(DateUtil.offsetMonth(result[0], 2));
|
break;
|
case QUARTERLY_4:
|
result[0] = DateUtil.offsetMonth(DateUtil.beginOfYear(now), 9);
|
result[1] = DateUtil.endOfMonth(DateUtil.offsetMonth(result[0], 2));
|
break;
|
case MONTH_12:
|
result[1] = DateUtil.endOfDay(now);
|
result[0] = DateUtil.offsetMonth(result[1], -12);
|
break;
|
case THIS_YEAR:
|
result[0] = DateUtil.beginOfYear(now);
|
result[1] = DateUtil.endOfYear(now);
|
default:
|
break;
|
}
|
return result;
|
}
|
|
/**
|
* 获取时间轴
|
*
|
* @param startTime
|
* @param endTime
|
* @param splitType
|
* @return
|
*/
|
public static List<String> getTimeline(Date startTime, Date endTime, SplitTypeEnum splitType) {
|
Date temp = startTime;
|
List<String> result = new ArrayList<>();
|
do {
|
result.add(DateUtil.format(temp, splitType.getFormat()));
|
temp = DateUtil.offset(temp, splitType.getDateField(), splitType.getStep());
|
} while (DateUtil.compare(temp, endTime) <= 0);
|
return result;
|
}
|
|
|
}
|