mitao
2025-05-20 179c4d64313c9b7572778da4aaaf6c6584fe457d
springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/DateUtils.java
@@ -4,11 +4,10 @@
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@@ -17,6 +16,7 @@
    public static DateTimeFormatter format_ymdhms = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    public static DateTimeFormatter format_ymd = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    public static DateTimeFormatter format_ymdhms_string = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
    public static DateTimeFormatter format_ymdhms_yyyyMMddmmHHssSSS = DateTimeFormatter.ofPattern("yyyyMMddmmHHssSSS");
    public static DateTimeFormatter format_ymdhms_no_signal = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
    public static SimpleDateFormat yyyyMMdd_format = new SimpleDateFormat("yyyy-MM-dd");
    public static SimpleDateFormat yyyy_MM_dd_format = new SimpleDateFormat("yyyy/MM/ddHH:mm:ss");
@@ -53,7 +53,7 @@
    /**
     * 字符串转date
     *
     *
     * @param date
     *            时间戳
     * @param format
@@ -74,7 +74,7 @@
    /**
     * 字符串转date
     *
     *
     * @param date
     *            时间戳
     * @return 时间
@@ -100,7 +100,7 @@
    /**
     * 字符串转date
     *
     *
     * @param date
     *            时间戳
     * @return 时间
@@ -119,7 +119,7 @@
    /**
     * 获取当前时间
     *
     *
     * @return
     * @throws Exception
     */
@@ -130,7 +130,7 @@
    /**
     * 返回当前事件的时间戳
     *
     *
     * @return
     */
    public static Long getCurrentDateTimeStamp() {
@@ -139,7 +139,7 @@
    /**
     * 获取当前时间字符串,格式为yyyy-MM-dd HH:mm:ss
     *
     *
     * @return
     */
    public static String getCurrentDateStr() {
@@ -159,7 +159,7 @@
    /**
     * 获取当前时间字符串,格式为yyyyMMdd
     *
     *
     * @return
     */
    public static String getCurrentDateString() {
@@ -169,7 +169,7 @@
    /**
     * 获取当前时间字符串,格式为yyyy-MM-dd
     *
     *
     * @return
     */
    public static String getCurrentDateStrymd() {
@@ -184,7 +184,7 @@
    /**
     * 获取当前时间long值
     *
     *
     * @return
     */
    public static long getCurrentDataLong() {
@@ -193,7 +193,7 @@
    /**
     * 获取当前时间
     *
     *
     * @param format
     * @return
     * @throws Exception
@@ -298,7 +298,7 @@
    /**
     * 对日期进行加法操作
     *
     *
     * @param date
     * @param hours
     * @return
@@ -315,7 +315,7 @@
    /**
     * 对日期的分钟进行加法操作
     *
     *
     * @param date
     * @param minutes
     * @return
@@ -390,7 +390,7 @@
    /**
     * 计算两个日期先差多少秒
     *
     *
     * @param pre
     *            前一个日期
     * @param after
@@ -403,7 +403,7 @@
    /**
     * 计算两个时间相差的天数
     *
     *
     * @param stardate
     * @param enddate
     * @return
@@ -416,16 +416,16 @@
        long day = diff / nd;
        long hour = diff % nd / nh;
        long hour = diff / nh;
        long min = diff % nd % nh / nm;
        long min = diff / nm;
        return (int)day;
        return (int)hour;
    }
    /**
     * 结束时间与当前时间计算相差的月数
     *
     *
     * @param enddate
     * @return
     */
@@ -444,7 +444,7 @@
    /**
     * 获取某个时间段之前的时间点
     *
     *
     * @return
     */
    public static String getSomeTimeStapStr(String sign) {
@@ -489,7 +489,7 @@
    /**
     * 获取失效时间点(在什么时间失效)
     *
     *
     * @param minutes
     *            有效分钟数
     * @return
@@ -500,7 +500,7 @@
    /**
     * 获取当前年份
     *
     *
     * @return
     */
    public static String getCurrentYear() {
@@ -510,7 +510,7 @@
    /**
     * 获取当前月份
     *
     *
     * @return
     */
    public static String getCurrentMonth() {
@@ -527,7 +527,7 @@
    /**
     * 获取无符号的当前时间
     *
     *
     * @return
     */
    public static String getCurrentDateStrNoSignal() {
@@ -536,7 +536,7 @@
    /**
     * 获取前几个小时的时间
     *
     *
     * @param hours
     * @return
     */
@@ -552,7 +552,7 @@
    /**
     * 小时取整
     *
     *
     * @param date
     * @param hour
     * @return
@@ -573,7 +573,7 @@
    /**
     * 分钟取整 以十分钟为单位 ,去除尾端,加上 参数 46->40+minutes*10
     *
     *
     * @param date
     * @param minutes
     * @return
@@ -601,7 +601,7 @@
    /**
     * 天数取整
     *
     *
     * @param date
     * @param day
     * @return
@@ -622,7 +622,7 @@
    /**
     * 日期相加减
     *
     *
     * @param time
     *            时间字符串 yyyy-MM-dd HH:mm:ss
     * @param num
@@ -684,7 +684,7 @@
    /**
     * 获取当前月第一天
     *
     *
     * @return
     */
    public static Date getFirstDayOfMonth() {
@@ -697,7 +697,7 @@
    /**
     * 获取当前年月的第一天时间
     *
     *
     * @param year
     *            年份
     * @param month
@@ -721,7 +721,7 @@
    /**
     * 获取当前年月的最后一天时间
     *
     *
     * @param year
     *            年份
     * @param month
@@ -781,7 +781,7 @@
    /**
     * date2比date1多的天数
     *
     *
     * @param date1
     * @param date2
     * @return
@@ -819,8 +819,28 @@
    }
    /**
     * 计算剩余天数,不足一天按一天算
     * @param expireDate
     * @return
     */
    public static int retrieveRemainingDays(Date expireDate) {
        Date nowDate = new Date();
        Calendar startDate = Calendar.getInstance();
        startDate.setTime(nowDate);
        Calendar endDate = Calendar.getInstance();
        endDate.setTime(expireDate);
        Calendar date = (Calendar) startDate.clone();
        int daysBetween = 0;
        while (date.before(endDate)) {
            date.add(Calendar.DAY_OF_MONTH, 1);
            daysBetween++;
        }
        return daysBetween;
    }
    /**
     * 获取当前月第一天
     *
     *
     * @return
     */
    public static String getFirstDayOfMonthString() {
@@ -836,7 +856,7 @@
    /**
     * 获取当前月最后一天
     *
     *
     * @return
     */
    public static String getLastDayOfMonthString() {
@@ -867,7 +887,7 @@
    /**
     * 获取当前时间(年月日)
     *
     *
     * @return
     */
    public static String getDayOfMonthString() {
@@ -907,11 +927,12 @@
    }
    public static void main(String[] args) throws Exception {
         Date date= getLastMonthFirst();
         Date after = getLastMonthEnd();
         System.out.println(date);
         System.out.println(after);
//        List<String> beforeDays = getBeforeDays(15);
//        System.out.println(beforeDays);
        List<String> yearMonths = getYearMonths();
        System.out.println(yearMonths);
        List<String> latest12Month = getLatest12Month(LocalDate.now(), 10);
        System.out.println(latest12Month);
    }
@@ -995,4 +1016,207 @@
        }
        return dates;
    }
    /**
     * 获取上月最后一天时间
     * @return  上月最后一天时间
     */
    public static String getOldMonthLastDay(){
        Calendar calendar=Calendar.getInstance();
        int month=calendar.get(Calendar.MONTH);
        calendar.set(Calendar.MONTH, month-1);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        return format_yyymmdd.format(calendar.getTime());
    }
    /**
     * 获取上月第一天时间
     * @return  上月第一天时间
     */
    public static String getOldMonthFirstDay(){
        Calendar calendar=Calendar.getInstance();
        calendar.add(Calendar.MONTH, -1);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        return format_yyymmdd.format(calendar.getTime());
    }
    /**
     * 获取某年的月份最后一天时间
     * @param year  年份
     * @return  月份list
     */
    public static List<String> getYearLastMonths(Integer year){
        List<String> list = new ArrayList<>();
        list.add(getLastDayOfMonth(year,1));
        list.add(getLastDayOfMonth(year,2));
        list.add(getLastDayOfMonth(year,3));
        list.add(getLastDayOfMonth(year,4));
        list.add(getLastDayOfMonth(year,5));
        list.add(getLastDayOfMonth(year,6));
        list.add(getLastDayOfMonth(year,7));
        list.add(getLastDayOfMonth(year,8));
        list.add(getLastDayOfMonth(year,9));
        list.add(getLastDayOfMonth(year,10));
        list.add(getLastDayOfMonth(year,11));
        list.add(getLastDayOfMonth(year,12));
        return list;
    }
    /**
     * 获取某年的月份第一天时间
     * @param year  年份
     * @return  月份list
     */
    public static List<String> getYearFirstMonths(Integer year){
        List<String> list = new ArrayList<>();
        list.add(getFirstDayOfMonth(year,1));
        list.add(getFirstDayOfMonth(year,2));
        list.add(getFirstDayOfMonth(year,3));
        list.add(getFirstDayOfMonth(year,4));
        list.add(getFirstDayOfMonth(year,5));
        list.add(getFirstDayOfMonth(year,6));
        list.add(getFirstDayOfMonth(year,7));
        list.add(getFirstDayOfMonth(year,8));
        list.add(getFirstDayOfMonth(year,9));
        list.add(getFirstDayOfMonth(year,10));
        list.add(getFirstDayOfMonth(year,11));
        list.add(getFirstDayOfMonth(year,12));
        return list;
    }
    /**
     * 获取某年某月最后一天
     * @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);
        //格式化日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String lastDayOfMonth = sdf.format(cal.getTime());
        return lastDayOfMonth;
    }
    /**
     *  获取某年某月的第一天
     * @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 firstDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
        //设置日历中月份的最小天数
        cal.set(Calendar.DAY_OF_MONTH, firstDay);
        //格式化日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String firstDayOfMonth = sdf.format(cal.getTime());
        return firstDayOfMonth;
    }
    /**
     * 获取20天前那天时间
     *
     * @return
     */
    public static String getTwentyDay() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.add(Calendar.DATE, -20);
        return DateUtil.format(cal.getTime(),"yyyy-MM-dd");
    }
    /**
     * 获取之前的日期
     *
     * @return
     */
    public static String getBeforeDay(Integer amount) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.add(Calendar.DATE, -amount);
        return DateUtil.format(cal.getTime(),"yyyy-MM-dd");
    }
    /**
     * 获取最近本月20天数据
     *
     * @return
     */
    public static String getMonthTwentyDay() {
        Date date = new Date();
        Long offset = DateUtil.between(new Date(), DateUtil.beginOfMonth(date), DateUnit.DAY);
        if (offset >= 20) {
            return getTwentyDay();
        } else {
            //距离月初不足20天
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(date);
            //获得本月第一天
            calendar.add(Calendar.MONTH, 0);
            calendar.set(Calendar.DAY_OF_MONTH, 1);
            return DateUtil.format(calendar.getTime(),"yyyy-MM-dd");
        }
    }
    public static List<String> getBeforeDays(int before) {
        List<String> dates = new ArrayList<>();
        for (int i = before; i >= 0; i--) {
            dates.add(getBeforeDay(i));
        }
        return dates;
    }
    /**
     * 获取当年所有月份
     *
     * @return
     */
    public static List<String> getYearMonths() {
        Calendar instance = Calendar.getInstance();
        int year = instance.get(Calendar.YEAR);
        List<String> months = new ArrayList<>();
        for (int i = 1; i <= 12; i++) {
            String result = String.valueOf(year);
            if (i < 10) {
                result = result + "-0" +i;
            } else {
                result = result + "-"+i;
            }
            months.add(result);
        }
        return months;
    }
    //获取当前12个月
    public static List<String> getLatest12Month(LocalDate date,int num){
        List<String> monthList = new ArrayList<>();
        for(int i = 0;i <= num-1; i++){
            LocalDate localDate = date.minusMonths(i);
            String month = localDate.toString().substring(0,7);
            monthList.add(month);
        }
        return monthList;
    }
}