kaiyu
2021-09-08 9cc9f173f8db89135610eba2c8af79c17b24dfdf
screen-common/src/main/java/com/moral/util/DateUtils.java
@@ -1,6 +1,7 @@
package com.moral.util;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
@@ -13,7 +14,7 @@
import java.time.ZonedDateTime;
import java.util.*;
@Slf4j
public class DateUtils {
    /**
     * 日期格式(yyyy)
@@ -79,11 +80,53 @@
     * 日期格式(yyyy-MM-dd HH)
     * */
    public static final String yyyy_MM_dd_HH_EN = "yyyy-MM-dd HH";
    /*
    * Date类toString格式
    * */
    public static final String EEE_MMM_dd_HH_mm_ss_zzz_yyyy = "EEE MMM dd HH:mm:ss zzz yyyy";
    /**
     * DateFormat缓存
     */
    private static Map<String, DateFormat> dateFormatMap = new HashMap<String, DateFormat>();
    /**
    * @Description: 将日期转换为当天的开始和结束时间
            * @Param: [date]
            * @return: java.util.List<java.util.Date>
            * @Author: 陈凯裕
            * @Date: 2021/9/8
            */
    public static List<Date> dateToStartAndEndTime(Date date){
        String dateStr = dateToDateString(date, "yyyy-MM-dd");
        String startDateStr = dateStr+" 00:00:00";
        String endDateStr = dateStr+" 23:59:59";
        Date startDate = getDate(startDateStr, "yyyy-MM-dd HH:mm:ss");
        Date endDate = getDate(endDateStr, "yyyy-MM-dd HH:mm:ss");
        ArrayList<Date> dates = new ArrayList<>();
        dates.add(startDate);
        dates.add(endDate);
        return dates;
    }
    /**
    * @Description: Date的toString格式转为Date
            * @Param: []
            * @return: java.util.Date
            * @Author: 陈凯裕
            * @Date: 2021/8/25
            */
    public static Date dateStringToDate(String formatStr){
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(EEE_MMM_dd_HH_mm_ss_zzz_yyyy, Locale.US);
            return sdf.parse(formatStr);
        } catch (ParseException e) {
            log.error(e.getMessage());
            return null;
        }
    }
    /**
     * 获取DateFormat
@@ -1358,7 +1401,7 @@
    /*
     * 根据时间获取时间内时间点
     * 例:time=2021-08-04 就得到这天内每个小时时间点
     * 例:time=2021-08-04 就得到这天内每个小时时间点2021-08-04 00,2021-08-04 01。。。
     *    time=2021-08 就得到这月内每天时间点
     * */
    public static List<String> getTimeLag(String time) {
@@ -1367,23 +1410,27 @@
        Calendar cal = Calendar.getInstance();
        String end;
        String dateFormat;
        String df;
        int i;
        if (length == 10) {//日
            end = getDateAddDay(time, 1);
            dateFormat = yyyy_MM_dd_EN;
            dateFormat = yyyy_MM_dd_HH_EN;
            df = yyyy_MM_dd_EN;
            i = Calendar.HOUR_OF_DAY;
        } else if (length == 7) {//月
            end = getDateAddMonth(time, 1);
            dateFormat = yyyy_MM_EN;
            dateFormat = yyyy_MM_dd_EN;
            df = yyyy_MM_EN;
            i = Calendar.DAY_OF_MONTH;
        } else {//年
            end = getDateAddYear(time, 1);
            dateFormat = yyyy;
            dateFormat = yyyy_MM_EN;
            df = yyyy;
            i = Calendar.MONTH;
        }
        cal.setTime(getDate(time, dateFormat));
        for (long d = cal.getTimeInMillis(); d < getDate(end, dateFormat).getTime(); cal.set(i, cal.get(i) + 1), d = cal.getTimeInMillis()) {
            String format = dateToDateString(new Date(d));
        cal.setTime(getDate(time, df));
        for (long d = cal.getTimeInMillis(); d < getDate(end, df).getTime(); cal.set(i, cal.get(i) + 1), d = cal.getTimeInMillis()) {
            String format = dateToDateString(new Date(d),dateFormat);
            result.add(format);
        }
        return result;