cjl
2025-01-06 27e6bc3df3e39e0d0b147b155a89ad6837ea972b
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,8 +14,12 @@
import java.time.ZonedDateTime;
import java.util.*;
@Slf4j
public class DateUtils {
    /**
     * 日期格式(yyyy)
     */
    public static final String yyyy = "yyyy";
    /**
     * 日期格式(yyyy-MM-dd)
     */
@@ -75,11 +80,177 @@
     * 日期格式(yyyy-MM-dd HH)
     * */
    public static final String yyyy_MM_dd_HH_EN = "yyyy-MM-dd HH";
    /*
     * 日期格式(MM-dd)
     * */
    public static final String MM_dd_EN = "MM-dd";
    /*
     * 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.Date
     * @Author: 陈凯裕
     * @Date: 2021/9/26
     */
    public static Date getHourlyStartTime(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }
    /**
     * @Description: 获取指定小时的结束时间
     * @Param: [date]
     * @return: java.util.Date
     * @Author: 陈凯裕
     * @Date: 2021/9/26
     */
    public static Date getHourlyEndTime(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }
    /**
     * @Description: 获取指定日期的第一个小时
     * @Param: [date]
     * @return: java.util.List<java.util.Date>
     * @Author: 陈凯裕
     * @Date: 2021/9/8
     */
    public static Date getDailyStartTime(Date date) {
        String dateStr = dateToDateString(date, "yyyy-MM-dd");
        String startDateStr = dateStr + " 00:00:00";
        Date startDate = getDate(startDateStr, "yyyy-MM-dd HH:mm:ss");
        return startDate;
    }
    /**
     * @Description: 获取指定日期的最后一个小时
     * @Param: [date]
     * @return: java.util.Date
     * @Author: 陈凯裕
     * @Date: 2021/9/26
     */
    public static Date getDailyEndTime(Date date) {
        String dateStr = dateToDateString(date, "yyyy-MM-dd");
        String endDateStr = dateStr + " 23:59:59";
        Date endDate = getDate(endDateStr, "yyyy-MM-dd HH:mm:ss");
        return endDate;
    }
    /**
     * @Description: 获取指定日期那周的第一天第一个小时
     * @Param: [date]
     * @return: java.util.Date
     * @Author: 陈凯裕
     * @Date: 2021/9/26
     */
    public static Date getWeeklyStartTime(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        if (1 == cal.get(Calendar.DAY_OF_WEEK)) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }
    /**
     * @Description: 获取指定日期那周的最后一天最后一个小时
     * @Param: [date]
     * @return: java.util.Date
     * @Author: 陈凯裕
     * @Date: 2021/9/26
     */
    public static Date getWeeklyEndTime(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        if (1 != cal.get(Calendar.DAY_OF_WEEK)) {
            cal.add(Calendar.DAY_OF_MONTH, 7);
        }
        cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }
    /**
     * @Description: 获取指定日期当月的第一天第一个小时
     * @Param: [date]
     * @return: java.util.Date
     * @Author: 陈凯裕
     * @Date: 2021/9/26
     */
    public static Date getMonthlyStartTime(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }
    /**
     * @Description: 获取指定日期当月的最后一天最后一个小时
     * @Param: [date]
     * @return: java.util.Date
     * @Author: 陈凯裕
     * @Date: 2021/9/26
     */
    public static Date getMonthlyEndTime(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }
    /**
     * @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
@@ -120,7 +291,7 @@
    }
    /**
     * 转化dateTimeStr为Date类型
     * 转化dateTimeStr为Date类型 去除时间
     *
     * @param dateTimeStr
     * @return
@@ -271,7 +442,7 @@
    }
    /**
     * 比较两个"yyyy-MM-dd HH:mm:ss"格式的日期,之间相差多少毫秒,time2-time1
     * 比较两个"yyyy-MM-dd"格式的日期,之间相差多少毫秒,time2-time1
     *
     * @param time1
     * @param time2
@@ -282,6 +453,20 @@
        Date d2 = getDate(time2);
        return d2.getTime() - d1.getTime();
    }
    /**
     * 比较两个"yyyy-MM-dd HH:mm:ss"格式的日期,之间相差多少毫秒,time2-time1
     *
     * @param time1
     * @param time2
     * @return
     */
    public static long compareDateStrDay(String time1, String time2) {
        Date d1 = getDate(time1,DateUtils.yyyy_MM_dd_HH_mm_ss_EN);
        Date d2 = getDate(time2,DateUtils.yyyy_MM_dd_HH_mm_ss_EN);
        return d2.getTime() - d1.getTime();
    }
    /**
     * 比较任意格式时间相差毫秒数
@@ -336,6 +521,14 @@
        }
    }
    public static boolean isTimeBeforE(Date nows, Date date) {
        long hous = nows.getTime() - date.getTime();
        if (hous >= 0) {
            return true;
        } else {
            return false;
        }
    }
    /**
     * 将小时数换算成返回以毫秒为单位的时间
     *
@@ -435,6 +628,7 @@
        return dateToDateString(now.getTime(), formatStr);
    }
    /**
     * 获取指定日期day天后的一个(formatStr)的字符串
     *
@@ -448,6 +642,22 @@
        now.setTime(getDate(date, formatStr));
        now.add(Calendar.DATE, day);
        return dateToDateString(now.getTime(), formatStr);
    }
    /**
     * 获取指定日期day天后的一个(formatStr)的字符串
     *
     * @param date
     * @param date,
     * @param hours
     * @return
     */
    public static Date getDateAddHour(Date date,int hours) {
        Calendar now = Calendar.getInstance(TimeZone.getDefault());
        now.setTime(date);
        now.add(Calendar.HOUR_OF_DAY, hours);
        return now.getTime();
    }
    /**
@@ -482,6 +692,8 @@
        }
        return new Date();
    }
    public static String getAfterNDays(Date date, int n, String formateStr) {
        SimpleDateFormat sdf = new SimpleDateFormat(formateStr);
@@ -746,8 +958,8 @@
     * @param days
     * @return
     */
    public static String getDateAddDay(String date, int days, String format) {
        DateFormat df = getDateFormat(format);
    public static String getDateAddDay(String date, int days) {
        DateFormat df = getDateFormat(yyyy_MM_dd_EN);
        try {
            Calendar cal = Calendar.getInstance();
            cal.setTime(df.parse(date));
@@ -761,6 +973,108 @@
    }
    /**
     * 获取当前月第一天
     *
     * @return
     */
    public static Date getFirstDayOfCurrMonth() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_MONTH, 1);
        return getDate(dateToDateString(cal.getTime(), yyyy_MM_dd_EN));
    }
    /*
     * 获取今年的第一天
     * */
    public static Date getFirstDayOfCurrYear() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_YEAR, 1);
        return getDate(dateToDateString(cal.getTime(), yyyy_MM_dd_EN));
    }
    /*
     * 获取日期年份的第一天
     * */
    public static Date getFirstDayOfYear(Date date) {
        final Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        final int last = cal.getActualMinimum(Calendar.DAY_OF_YEAR);
        cal.set(Calendar.DAY_OF_YEAR, last);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        return cal.getTime();
    }
    /*
     * 获取日期年份的最后一天
     * */
    public static Date getLastDayOfYear(Date date) {
        final Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        final int last = cal.getActualMaximum(Calendar.DAY_OF_YEAR);
        cal.set(Calendar.DAY_OF_YEAR, last);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        return cal.getTime();
    }
    /*
     * 获取指定日期月的第一天
     * */
    public static Date getFirstDayOfMonth(Date date) {
        final Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        final int last = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
        cal.set(Calendar.DAY_OF_MONTH, last);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        return cal.getTime();
    }
    /*
     * 获取指定日期月的最后一天
     * */
    public static Date getLastDayOfMonth(Date date) {
        final Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        final int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        cal.set(Calendar.DAY_OF_MONTH, last);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        return cal.getTime();
    }
    /*
     * 判断日期是否为今年
     * */
    public static boolean isCurrentYear(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        int currentYear = cal.get(Calendar.YEAR);
        cal.setTime(date);
        int year = cal.get(Calendar.YEAR);
        return year == currentYear;
    }
    /*
     * 判断日期是否为本月
     * */
    public static boolean isCurrentMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        int currentYear = cal.get(Calendar.MONTH);
        cal.setTime(date);
        int year = cal.get(Calendar.MONTH);
        return year == currentYear;
    }
    /**
     * 获取当前月的最后一天
     *
     * @return
@@ -769,8 +1083,15 @@
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MONTH, 1);
        cal.set(Calendar.DAY_OF_MONTH, 0);
        return getDate(dateToDateString(cal.getTime(), yyyy_MM_dd_EN));
    }
        return cal.getTime();
    public static Date getLastDayOfCurrMonth(Date time) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(time);
        cal.add(Calendar.MONTH, 1);
        cal.set(Calendar.DAY_OF_MONTH, 0);
        return getDate(dateToDateString(cal.getTime(), yyyy_MM_dd_EN));
    }
    /**
@@ -781,7 +1102,7 @@
     * @return
     */
    public static String getDateAddMonth(String date, int m) {
        DateFormat df = getDateFormat(yyyyMM_EN);
        DateFormat df = getDateFormat(yyyy_MM_EN);
        try {
            Calendar cal = Calendar.getInstance();
            cal.setTime(df.parse(date));
@@ -791,50 +1112,6 @@
            throw new RuntimeException(e);
        }
        return date;
    }
    /**
     * 获取指定年月的第一天
     *
     * @param year
     * @param month
     * @return
     */
    public static String getFirstDayOfMonth(int year, int month) {
        Calendar cal = Calendar.getInstance();
        // 设置年份
        cal.set(Calendar.YEAR, year);
        // 设置月份
        cal.set(Calendar.MONTH, month - 1);
        // 获取某月最小天数
        int lastDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
        // 设置日历中月份的最大天数
        cal.set(Calendar.DAY_OF_MONTH, lastDay);
        // 格式化日期
        DateFormat df = getDateFormat(yyyy_MM_dd_EN);
        return df.format(cal.getTime());
    }
    /**
     * 获取指定年月的第一天
     *
     * @param year
     * @param month
     * @return
     */
    public static String getLastDayOfMonth(int year, int month) {
        Calendar cal = Calendar.getInstance();
        // 设置年份
        cal.set(Calendar.YEAR, year);
        // 设置月份
        cal.set(Calendar.MONTH, month - 1);
        // 获取某月最大天数
        int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        // 设置日历中月份的最大天数
        cal.set(Calendar.DAY_OF_MONTH, lastDay);
        // 格式化日期
        DateFormat df = getDateFormat(yyyy_MM_dd_EN);
        return df.format(cal.getTime());
    }
    /**
@@ -852,6 +1129,18 @@
        return df.format(calendar.getTime());
    }
    /*
     * 获取昨天Date
     * */
    public static Date getYesterdayDate() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.add(Calendar.DAY_OF_MONTH, -1);
        return cal.getTime();
    }
    /**
     * 10位时间戳转时间
@@ -938,6 +1227,7 @@
        todayStart.set(Calendar.MILLISECOND, 0);
        return todayStart.getTime().getTime();
    }
    public static Integer getTodayInt() {
        return (int) (getTodayTime() / 1000);
@@ -1206,6 +1496,14 @@
        return calendar.getTime();
    }
    //加减年份
    public static Date addYears(Date date, int years) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, years);
        return calendar.getTime();
    }
    /**
     * <p>
     * Title: getDays
@@ -1225,6 +1523,170 @@
        days = (int) ((maxDate.getTime() - minDate.getTime()) / (24 * 60 * 60 * 1000));
        return days;
    }
    /**
     * @Description: 获取两个日期相差几个月
     * @Param: [start, end]
     * @return: int
     * @Author: 陈凯裕
     * @Date: 2021/9/23
     */
    public static int getMonth(Date start, Date end) {
        if (start.after(end)) {
            Date t = start;
            start = end;
            end = t;
        }
        Calendar startCalendar = Calendar.getInstance();
        startCalendar.setTime(start);
        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(end);
        Calendar temp = Calendar.getInstance();
        temp.setTime(end);
        temp.add(Calendar.DATE, 1);
        int year = endCalendar.get(Calendar.YEAR)
                - startCalendar.get(Calendar.YEAR);
        int month = endCalendar.get(Calendar.MONTH)
                - startCalendar.get(Calendar.MONTH);
        if ((startCalendar.get(Calendar.DATE) == 1)
                && (temp.get(Calendar.DATE) == 1)) {
            return year * 12 + month + 1;
        } else if ((startCalendar.get(Calendar.DATE) != 1)
                && (temp.get(Calendar.DATE) == 1)) {
            return year * 12 + month;
        } else if ((startCalendar.get(Calendar.DATE) == 1)
                && (temp.get(Calendar.DATE) != 1)) {
            return year * 12 + month;
        } else {
            return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);
        }
    }
    /**
     * @Description: 获取两个日期之间所有的月份
     * @Param: [start, end]
     * @return: java.util.List<java.lang.String>
     * @Author: 陈凯裕
     * @Date: 2021/9/23
     */
    public static List<String> getAllMonth(Date start, Date end) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(start);
        // 获取开始年份和开始月份
        int startYear = calendar.get(Calendar.YEAR);
        int startMonth = calendar.get(Calendar.MONTH);
        // 获取结束年份和结束月份
        calendar.setTime(end);
        int endYear = calendar.get(Calendar.YEAR);
        int endMonth = calendar.get(Calendar.MONTH);
        //
        List<String> list = new ArrayList<String>();
        for (int i = startYear; i <= endYear; i++) {
            String date = "";
            if (startYear == endYear) {
                for (int j = startMonth; j <= endMonth; j++) {
                    if (j < 9) {
                        date = i + "-0" + (j + 1);
                    } else {
                        date = i + "-" + (j + 1);
                    }
                    list.add(date);
                }
            } else {
                if (i == startYear) {
                    for (int j = startMonth; j < 12; j++) {
                        if (j < 9) {
                            date = i + "-0" + (j + 1);
                        } else {
                            date = i + "-" + (j + 1);
                        }
                        list.add(date);
                    }
                } else if (i == endYear) {
                    for (int j = 0; j <= endMonth; j++) {
                        if (j < 9) {
                            date = i + "-0" + (j + 1);
                        } else {
                            date = i + "-" + (j + 1);
                        }
                        list.add(date);
                    }
                } else {
                    for (int j = 0; j < 12; j++) {
                        if (j < 9) {
                            date = i + "-0" + (j + 1);
                        } else {
                            date = i + "-" + (j + 1);
                        }
                        list.add(date);
                    }
                }
            }
        }
        return list;
    }
    /**
     * @Description: 获取两个日期之间所有的年份
     * @Param: [start, end]
     * @return: java.util.List<java.lang.String>
     * @Author: 陈凯裕
     * @Date: 2021/9/23
     */
    public static List<String> getAllYear(Date start, Date end) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(start);
        int startYear = calendar.get(Calendar.YEAR);
        calendar.setTime(end);
        int endYear = calendar.get(Calendar.YEAR);
        List<String> list = new ArrayList<>();
        list.add(String.valueOf(startYear));
        int i = endYear - startYear;
        for (int j = 1; j < i + 1; j++) {
            list.add(String.valueOf(startYear + j));
        }
        return list;
    }
    public static List<String> getAllDays(Date start, Date end) {
        List<String> list = new ArrayList<String>();
        SimpleDateFormat outformat = new SimpleDateFormat("yyyy-MM-dd");
        Calendar sCalendar = Calendar.getInstance();
        sCalendar.setTime(start);
        int year = sCalendar.get(Calendar.YEAR);
        int month = sCalendar.get(Calendar.MONTH);
        int day = sCalendar.get(Calendar.DATE);
        sCalendar.set(year, month, day, 0, 0, 0);
        Calendar eCalendar = Calendar.getInstance();
        eCalendar.setTime(end);
        year = eCalendar.get(Calendar.YEAR);
        month = eCalendar.get(Calendar.MONTH);
        day = eCalendar.get(Calendar.DATE);
        eCalendar.set(year, month, day, 0, 0, 0);
        while (sCalendar.before(eCalendar)) {
            list.add(outformat.format(sCalendar.getTime()));
            sCalendar.add(Calendar.DAY_OF_YEAR, 1);
        }
        list.add(outformat.format(eCalendar.getTime()));
        return list;
    }
    /**
     * 时间戳转 date
@@ -1326,4 +1788,110 @@
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        return getDate(dateToDateString(calendar.getTime(), yyyy_MM_dd_EN));
    }
    /*获取指定年后年*/
    public static String getDateAddYear(String date, int year) {
        DateFormat df = getDateFormat(yyyy);
        try {
            Calendar cal = Calendar.getInstance();
            cal.setTime(df.parse(date));
            cal.add(Calendar.YEAR, year);
            date = df.format(cal.getTime());
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        return date;
    }
    /*
     * 根据时间获取时间内时间点
     * 例:time=2021-08-04 就得到这天内每个小时时间点2021-08-04 00,2021-08-04 01。。。
     *    time=2021-08 就得到这月内每天时间点
     * */
    public static List<String> getTimeLag(String time) {
        List<String> result = new ArrayList<>();
        int length = time.length();
        Calendar cal = Calendar.getInstance();
        String end;
        String dateFormat;
        String df;
        int i;
        if (length == 10) {//日
            end = getDateAddDay(time, 1);
            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_dd_EN;
            df = yyyy_MM_EN;
            i = Calendar.DAY_OF_MONTH;
        } else {//年
            end = getDateAddYear(time, 1);
            dateFormat = yyyy_MM_EN;
            df = yyyy;
            i = Calendar.MONTH;
        }
        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;
    }
    //根据date取之前第一个分钟为0或5的时间点。例:2021-08-09 15:32:00->2021-08-09 15:30:00,2021-08-09 15:39:00->2021-08-09 15:35:00
    public static Date getFiveMinuteDate(Date date) {
        String dateString = dateToDateString(date, yyyy_MM_dd_HH_mm_EN);
        String minute = dateString.substring(15, 16);
        int i = Integer.parseInt(minute);
        if (i > 0 && i < 5) {
            i = 0;
        } else if (i > 5 && i <= 9) {
            i = 5;
        }
        StringBuilder stringBuffer = new StringBuilder(dateString);
        stringBuffer.replace(15, 16, String.valueOf(i));
        return getDate(stringBuffer.toString(), yyyy_MM_dd_HH_mm_EN);
    }
    //获取指定日期hours小时后日期
    public static Date addHours(Date date, int hours) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR_OF_DAY, hours);
        return calendar.getTime();
    }
    //获取去年Date
    public static Date getFirstDayOfLastYear() {
        String lastYear = getDateAddYear(DateUtils.dateToDateString(getDate(), DateUtils.yyyy), -1);
        return DateUtils.getDate(lastYear, DateUtils.yyyy);
    }
    //去年指定日期
    public static Date getFirstDayOfLastYear(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, -1);
        return calendar.getTime();
    }
    //获取一天中每个小时的前后一小时集合
    public static Map<Date, List<Integer>> getBeforeAndAfterHourDate(Date date) {
        String s = dateToDateString(date, yyyy_MM_dd_EN);
        List<String> timeLag = getTimeLag(s);
        Map<Date, List<Integer>> result = new HashMap<>();
        for (String s1 : timeLag) {
            List<Integer> objects = new ArrayList<>();
            Date current = getDate(s1, yyyy_MM_dd_HH_EN);
            Date before = addHours(current, -1);
            Date after = addHours(current, 1);
            objects.add(getHour(before));
            objects.add(getHour(current));
            objects.add(getHour(after));
            result.put(current, objects);
        }
        return result;
    }
}