美文网首页
计算日期工具类

计算日期工具类

作者: 初心myp | 来源:发表于2020-07-28 17:00 被阅读0次
package com.niu.afsale.common.utils;

import com.niu.afsale.common.AfsaleConstants;
import org.slf4j.Logger;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @FileName: DateUtil
 * @Description: 日期工具类
 * @author: <a href="mailto: muyuanpei@camelotchina.com">myp</a>
 * @create: 2020-07-28 10:02
 * @Copyright: (c) 2018年 北京柯莱特科技有限公司
 */
public class DateUtil {

    private static Logger log = Log.get(DateUtil.class);

    // 获取前一天日期
    public static Date getTimeDay(Date date) {
        Calendar ca = Calendar.getInstance();//得到一个Calendar的实例
        ca.setTime(date); //设置时间为当前时间
        ca.add(Calendar.DATE, -1); //日期减1
        Date lastDay = ca.getTime(); //结果
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String nowStr = new SimpleDateFormat("yyyy-MM-dd").format(lastDay);
            Date dateResult = sdf.parse(nowStr);
            return dateResult;
        } catch (Exception e) {
            log.error("方法:[{}],错误描述:[{}]", "DateUtil-getTimeDay", "获取日期的前一天错误!!!");
        }
        return null;
    }

    // 获取当前月的第一天
    public static Date getCurrentMonthFirstDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.MONTH, 0);
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String currentMonthFirstDayStr = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
            Date currentMonthFirstDay = sdf.parse(currentMonthFirstDayStr);
            return currentMonthFirstDay;
        } catch (Exception e) {
            log.error("方法:[{}],错误描述:[{}]", "DateUtil-getCurrentMonthFirstDay", "获取当前月的第一天错误!!!");
        }
        return null;
    }

    //获取当前日期上个月的第一天
    public static Date preMonthFirstDate() {
        Calendar cal_1 = Calendar.getInstance();//获取当前日期
        cal_1.add(Calendar.MONTH, -1);
        cal_1.set(Calendar.DAY_OF_MONTH, 1);
        Date preMonthFirstDate = cal_1.getTime();
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String preMonthFirstDateStr = new SimpleDateFormat("yyyy-MM-dd").format(preMonthFirstDate);
            Date preMonthFirstDateResult = sdf.parse(preMonthFirstDateStr);
            return preMonthFirstDateResult;
        } catch (Exception e) {
            log.error("方法:[{}],错误描述:[{}]", "DateUtil-preMonthFirstDate", "获取当前日期上个月的第一天错误!!!");
        }
        return null;
    }

    //获取当前日期上个月的最后一天
    public static Date preMonthLastDate() {
        Calendar cale = Calendar.getInstance();
        cale.set(Calendar.DAY_OF_MONTH, 0);
        Date preMonthLastDate = cale.getTime();
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String preMonthLastDateStr = new SimpleDateFormat("yyyy-MM-dd").format(preMonthLastDate);
            Date preMonthLastDateResult = sdf.parse(preMonthLastDateStr);
            return preMonthLastDateResult;
        } catch (Exception e) {
            log.error("方法:[{}],错误描述:[{}]", "DateUtil-preMonthLastDate", "获取当前日期上个月的最后一天错误!!!");
        }
        return null;
    }

    // 获取入参日期的下个月的第一天
    public static Date firstDayOfNextMonth(Date date) {
        //获得入参的日期
        Calendar cd = Calendar.getInstance();
        cd.setTime(date);
        //获取下个月第一天:
        cd.add(Calendar.MONTH, 1);
        //设置为1号,当前日期既为次月第一天
        cd.set(Calendar.DAY_OF_MONTH,1);
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String firstDayOfNextMonthStr = new SimpleDateFormat("yyyy-MM-dd").format(cd.getTime());
            Date firstDayOfNextMonthResult = sdf.parse(firstDayOfNextMonthStr);
            return firstDayOfNextMonthResult;
        } catch (Exception e) {
            log.error("方法:[{}],错误描述:[{}]", "DateUtil-preMonthLastDate", "获取入参日期的下个月的第一天错误!!!");
        }
        return null;
    }

    public static List<String> getmous(String start, String end) {
        List<String> date = new ArrayList<String>();
        try {
            Date d1 = new SimpleDateFormat("yyyy-MM-dd").parse(start);//定义起始日期
            Date d2 = new SimpleDateFormat("yyyy-MM-dd").parse(end);//定义结束日期
            Calendar dd = Calendar.getInstance();//定义日期实例
            dd.setTime(d1);//设置日期起始时间
            while (dd.getTime().before(d2)) {//判断是否到结束日期
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                String str = sdf.format(dd.getTime());
                date.add(str);
                dd.add(Calendar.MONTH, 1);//进行当前日期月份加1
            }
            date.add(end);
        } catch (Exception e) {
            System.out.println("异常" + e.getMessage());
        }
        return date;
    }

    // 获取一段时间范围内的每个月1日
    public static List<String> getDateSection() {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String nowStr = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
            Date date = sdf.parse(nowStr);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            calendar.set(Calendar.DAY_OF_MONTH, 1);
            calendar.add(Calendar.MONTH, 1);
            List<String> getmous = getmous(AfsaleConstants.SETTLEMENT_STATISTICS_START_DATE, sdf.format(calendar.getTime()));
            System.out.println(getmous);
            return getmous;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    public static void main(String[] args) {
        Date date = new Date();
        Date firstDayOfNextMonth = firstDayOfNextMonth(date);
        System.out.println(firstDayOfNextMonth);
    }
}

没有满足需求的请参考以下文章:
https://blog.csdn.net/broucetrong/article/details/81452377


2021.12.23更新

    private static Logger log = LoggerFactory.getLogger(DateUtils.class);
    public static final long DayMills = 24 * 60 * 60 * 1000L;

    public static String DATE_PATTERN = "yyyy-MM-dd";
    public static String DATE_FORMAT = "yyyy.MM.dd";

    public static String TIME_PATTERN = DATE_PATTERN + " HH:mm:ss";

    public static final String YMD_PATTERN = "yyyyMMdd";
    public static final String YM_PATTERN = "yyyyMM";
    public static final String HMS_PATTERN = "HHmmss";
    public static final String YMDHMS_PATTERN = YMD_PATTERN + HMS_PATTERN;

    public static final String DateBeginPoint = "000000";
    public static final String DateEndPoint = "235959";

    /**
     * 获取当前系统时间
     */
    public static Date getCurrentDateSys() {
        return Calendar.getInstance().getTime();
    }

    public static Timestamp getCurrentTimestamp() {
        return new Timestamp(Calendar.getInstance().getTime().getTime());
    }

    public static String formatDate(Date date, String format) {
        if (date == null) {
            return "";
        } else {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
            return simpleDateFormat.format(date);
        }
    }

    public static String formatDate(Date date) {
        return formatDate(date, DATE_PATTERN);
    }

    public static String formatDateTime(Date date) {
        return formatDate(date, TIME_PATTERN);
    }

    /**
     * 转换为时间(天,时:分:秒.毫秒)
     *
     * @param timeMillis
     * @return
     */
    public static String formatDateTime(long timeMillis) {
        long day = timeMillis / (24 * 60 * 60 * 1000);
        long hour = (timeMillis / (60 * 60 * 1000) - day * 24);
        long min = ((timeMillis / (60 * 1000)) - day * 24 * 60 - hour * 60);
        long s = (timeMillis / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
        long sss = (timeMillis - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000 - min * 60 * 1000 - s * 1000);
        return (day > 0 ? day + "," : "") + hour + ":" + min + ":" + s + "." + sss;
    }

    public static Date parseDate(String strDate, String format) {
        try {
            if (strDate != null && !strDate.equals("")) {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
                return simpleDateFormat.parse(strDate);
            } else {
                return null;
            }
        } catch (Exception var3) {
            return new Date();
        }
    }

    public static Date parseDateFormat(String strDate, String format) {
        try {
            if (strDate != null && !strDate.equals("")) {
                SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
                return simpleDateFormat.parse(strDate);
            } else {
                return new Date(0L);
            }
        } catch (Exception var3) {
            return new Date(0L);
        }
    }

    public static Date parseDate(String strDate) {
        return parseDate(strDate, DATE_PATTERN);
    }

    public static Date parseDateTime(String strDate) {
        return parseDate(strDate, TIME_PATTERN);
    }

    public static Date parseDateFormat(String strDate) {
        return parseDateFormat(strDate, DATE_FORMAT);
    }

    /**
     * 计算 second 秒后的时间
     *
     * @param date
     * @param second
     */
    public static Date addSecond(Date date, int second) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.SECOND, second);
        return calendar.getTime();
    }

    /**
     * 计算 minute 分钟后的时间
     *
     * @param date
     * @param minute
     */
    public static Date addMinute(Date date, int minute) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MINUTE, minute);
        return calendar.getTime();
    }

    /**
     * 计算 hour 小时后的时间
     *
     * @param date
     * @param hour
     */
    public static Date addHour(Date date, int hour) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR, hour);
        return calendar.getTime();
    }

    /**
     * 在输入日期上增加(+)或减去(-)天数
     *
     * @param date 输入日期
     * @param iday 要增加或减少的天数
     */
    public static Date addDay(Date date, int iday) {
        Calendar cd = Calendar.getInstance();
        cd.setTime(date);
        cd.add(Calendar.DAY_OF_MONTH, iday);
        return cd.getTime();
    }

    /**
     * 在输入日期上增加(+)或减去(-)月份
     *
     * @param date   输入日期
     * @param imonth 要增加或减少的月分数
     */
    public static Date addMonth(Date date, int imonth) {
        Calendar cd = Calendar.getInstance();
        cd.setTime(date);
        cd.add(Calendar.MONTH, imonth);
        return cd.getTime();
    }

    public static Date addMonthOfStr(Date date, int imonth, int dayNum) {
        // int dayNum = Integer.parseInt(new SimpleDateFormat("yyyy-MM-dd").format(date).toString().split("-")[2]);
        int monthNum = Integer.parseInt(new SimpleDateFormat("yyyy-MM-dd").format(date).toString().split("-")[1]);
        int yearNum = Integer.parseInt(new SimpleDateFormat("yyyy-MM-dd").format(date).toString().split("-")[0]);
        monthNum += imonth;
        if (monthNum > 12) {
            monthNum -= 12;
            yearNum += 1;
        }
        String newDateStr = String.valueOf(yearNum) + "-" + String.valueOf(monthNum) + "-" + String.valueOf(dayNum);
        if (DateUtils.isLegalDate(newDateStr)) {
            Date newDate = DateUtils.parseDate(newDateStr, DateUtils.DATE_PATTERN);
            return newDate;
        } else {
            return null;
        }

    }

    /**
     * 在输入日期上增加(+)或减去(-)年份
     *
     * @param date  输入日期
     * @param iyear 要增加或减少的年数
     */
    public static Date addYear(Date date, int iyear) {
        Calendar cd = Calendar.getInstance();
        cd.setTime(date);
        cd.add(Calendar.YEAR, iyear);
        return cd.getTime();
    }

    public static String getTimePattern() {
        return TIME_PATTERN;
    }

    /***
     * 计算两个日期的距离天数
     *
     * @param beginDate
     * @param endDate
     * @return
     */
    private static long calcBetweenDayNum(Date beginDate, Date endDate) {
        Calendar beginCalendar = Calendar.getInstance();
        beginCalendar.setTime(beginDate);
        beginCalendar.set(Calendar.HOUR_OF_DAY, 0);
        beginCalendar.set(Calendar.MINUTE, 0);
        beginCalendar.set(Calendar.SECOND, 0);
        beginCalendar.set(Calendar.MILLISECOND, 0);

        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(endDate);
        endCalendar.set(Calendar.HOUR_OF_DAY, 0);
        endCalendar.set(Calendar.MINUTE, 0);
        endCalendar.set(Calendar.SECOND, 0);
        endCalendar.set(Calendar.MILLISECOND, 0);
        long endTimeMillis = endCalendar.getTimeInMillis();
        long beginTimeMillis = beginCalendar.getTimeInMillis();
        long ce = endTimeMillis - beginTimeMillis;

        BigDecimal dayMills = BigDecimal.valueOf(DayMills);
        BigDecimal bDecimal = BigDecimal.valueOf(ce).divide(dayMills, RoundingMode.CEILING);
        return bDecimal.longValue();

    }

    public static long clacBetweenTime(Date startDate, Date endDate, int unit) {
        long ln = endDate.getTime() - startDate.getTime();
        ln = Math.abs(ln);
        long ce = 0;
        switch (unit) {
        case Calendar.MINUTE:
            ce = ln / (1000 * 60);
            break;
        case Calendar.DAY_OF_MONTH:
            ce = calcBetweenDayNum(startDate, endDate);
            break;
        default:
            break;
        }
        return ce;
    }

    public static Date dayBegin(Date d) {
        Calendar cal = Calendar.getInstance(Locale.CHINA);
        cal.setTime(d);
        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();
    }

    public static Date dayEnd(Date d) {
        Calendar cal = Calendar.getInstance(Locale.CHINA);
        cal.setTime(d);
        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();
    }

    public static Integer getWeekNum(Date today) {
        Calendar cal = Calendar.getInstance(Locale.CHINA);
        cal.setTime(today);
        return cal.get(Calendar.DAY_OF_WEEK);
    }

    /***
     * 获取日期所在周的周一
     *
     * @param day
     * @return
     */
    /**
     * @param day
     * @return
     */
    public static Date monday(Date day) {
        Calendar calendar = Calendar.getInstance(Locale.CHINA);
        calendar.setTime(day);
        int num = calendar.get(Calendar.DAY_OF_WEEK);
        num = num - 1;
        num = (num == 0) ? 7 : num;
        int ce = (1 - num);

        calendar.add(Calendar.DATE, ce);
        return calendar.getTime();
    }

    public static Date sunday(Date day) {

        Calendar calendar = Calendar.getInstance(Locale.CHINA);
        calendar.setTime(monday(day));
        calendar.add(Calendar.DAY_OF_MONTH, 6);
        return calendar.getTime();
    }

    public static Date getWeekDay(Date curDate, WeekEnum weekEnum) {
        Date weekDay = monday(curDate);
        switch (weekEnum) {
        case Sunday:
            weekDay = sunday(curDate);
            break;

        default:
            weekDay = addDay(weekDay, (weekEnum.getCode() - 2));
            break;
        }
        return weekDay;
    }

    /***
     * 获取日期所在月最后一天
     *
     * @param day
     * @return
     */
    public static Date monthFirstDay(Date day) {
        Calendar calendar = Calendar.getInstance(Locale.CHINA);
        calendar.setTime(day);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        String ymdStr = DateUtils.formatDate(calendar.getTime(), DateUtils.YMD_PATTERN);
        return DateUtils.parseDate(ymdStr + DateBeginPoint, DateUtils.YMDHMS_PATTERN);
    }

    public static Date monthLastDay(Date day) {
        Calendar calendar = Calendar.getInstance(Locale.CHINA);
        calendar.setTime(monthFirstDay(day));
        calendar.add(Calendar.MONTH, 1);
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        return calendar.getTime();
    }

    /***
     * 获取当前日期季度的开始时间
     * 
     * @param date
     * @return
     */
    public static Date quarterBegin(Date date) {
        Quarter quarter = getQuarter(date);
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        switch (quarter) {
        case FIRST:
            calendar.set(Calendar.MONTH, Calendar.JANUARY);
            break;
        case SECOND:
            calendar.set(Calendar.MONTH, Calendar.APRIL);
            break;
        case THIRD:
            calendar.set(Calendar.MONTH, Calendar.JULY);
            break;
        case FOURTH:
            calendar.set(Calendar.MONTH, Calendar.OCTOBER);
            break;

        }
        // System.out.println(DateUtils.formatDateTime(calendar.getTime()));
        return calendar.getTime();
    }

    /***
     * 获取当前日期所属季度的最后一天
     * 
     * @param date
     * @return
     */
    public static Date quarterEnd(Date date) {
        Quarter quarter = getQuarter(date);
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);
        switch (quarter) {
        case FIRST:
            calendar.set(Calendar.MONTH, Calendar.APRIL);
            break;
        case SECOND:
            calendar.set(Calendar.MONTH, Calendar.JULY);
            break;
        case THIRD:
            calendar.set(Calendar.MONTH, Calendar.OCTOBER);
            break;
        case FOURTH:
            calendar.set(Calendar.MONTH, Calendar.UNDECIMBER);
            break;

        }
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        // System.out.println(DateUtils.formatDateTime(calendar.getTime()));
        return calendar.getTime();
    }

    /**
     * @Discription: 获取当前时间所在年份的第一天
     * @Created on: 2021/5/28 9:25
     * @author muyuanpei
     */
    public static Date yearFirstDay(Date day) {
        Calendar currCal = Calendar.getInstance();

        if(null != day){
            currCal.setTime(day);
        }
        int year = currCal.get(Calendar.YEAR);

        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        Date currYearFirst = calendar.getTime();
        return currYearFirst;
    }

    /***
     * 年度最后一天
     * 
     * @param date
     * @return
     */
    public static Date yearLastDay(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(yearFirstDay(date));
        cal.add(Calendar.YEAR, 1);
        cal.add(Calendar.DAY_OF_YEAR, -1);
        return cal.getTime();
    }

    /**
     * 获取指定日期下个月的第一天
     * 
     * @return
     */
    public static Date getNextMonth(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.MONTH, 1);
        return calendar.getTime();
    }

    /***
     * 获取当月的第几周的哪一天
     * 
     * @return
     * @throws BizException
     */
    public static Date getWeekBegin(Integer year, int month, int weekNo) throws BizException {
        if (weekNo < 1) {
            throw new BizException("周号不允许小于1");
        }
        // 获取这个月的第一天
        Calendar calendar = Calendar.getInstance(Locale.CHINA);
        calendar.set(year, month - 1, 1, 0, 0, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        Date monthBegin = calendar.getTime();
        Date monthEnd = monthLastDay(calendar.getTime());
        calendar.add(Calendar.DAY_OF_MONTH, (weekNo - 1) * 7);
        // 获取这周的开始时间
        Date monday = getWeekDay(calendar.getTime(), WeekEnum.Monday);

        if (monthEnd.compareTo(monday) < 0) {
            throw new BizException(MessageFormat.format("{0}月没有第{1}周", month, weekNo));
        }
        return monthBegin.compareTo(monday) >= 0 ? monthBegin : monday;
    }

    /**
     * @Discription: 获取当前月有多少周
     * @Created on: 2020/11/5 16:12
     * @author muyuanpei
     */
    public static int getMonthWeekCount(Integer year, int month) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, (month - 1));
        c.setFirstDayOfWeek(Calendar.MONDAY);
        System.out.println(c.get(Calendar.YEAR) + "年" + (c.get(Calendar.MONTH) + 1) + "月");
        System.out.println("天数:" + c.getActualMaximum(Calendar.DAY_OF_MONTH));
        System.out.println("Actual周数:" + c.getActualMaximum(Calendar.WEEK_OF_MONTH));
        int actualMaximum = c.getActualMaximum(Calendar.WEEK_OF_MONTH);
        return actualMaximum;
    }

    public static Date getWeekEnd(Integer year, int month, int weekNo) throws BizException {
        if (weekNo < 1) {
            throw new BizException("周号不允许小于1");
        }
        // 获取这个月的第一天
        Calendar calendar = Calendar.getInstance();
        calendar.set(year, month - 1, 1, 0, 0, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        // 月最后一天
        Date monthlastDay = monthLastDay(calendar.getTime());

        calendar.add(Calendar.DAY_OF_MONTH, (weekNo - 1) * 7);
        // 获取周日
        Date sunDay = getWeekDay(calendar.getTime(), WeekEnum.Sunday);
        // 获取周一
        Date monday = getWeekDay(sunDay, WeekEnum.Monday);
        if (monday.compareTo(monthlastDay) > 0) {
            throw new BizException(MessageFormat.format("{0}月没有第{1}周", month, weekNo));
        }

        Date d = sunDay.compareTo(monthlastDay) >= 0 ? monthlastDay : sunDay;
        return dayEnd(d);
    }

    /**
    * @Discription: 获取当前月所有日期
    * @Created on: 2021/6/9 14:54
    * @author muyuanpei
    */
    public static List<String> getFullDayList(Date date) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String dateStr = format.format(date);
        List<String> fullDayList = new ArrayList<String>();
        int year = Integer.parseInt(dateStr.substring(0, 4));
        int month = Integer.parseInt(dateStr.substring(5, 7));
        int day = 1;// 所有月份从1号开始
        Calendar cal = Calendar.getInstance();// 获得当前日期对象
        cal.clear();// 清除信息
        cal.set(Calendar.YEAR, year);
        cal.set(Calendar.MONTH, month - 1);// 1月从0开始
        cal.set(Calendar.DAY_OF_MONTH, day);
        int count = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        for (int j = 0; j <= (count - 1);) {
            if (format.format(cal.getTime()).equals(monthLastDay(date)))
                break;
            cal.add(Calendar.DAY_OF_MONTH, j == 0 ? +0 : +1);
            j++;
            fullDayList.add(format.format(cal.getTime()));
        }
        return fullDayList;
    }

    public static enum Quarter {
        FIRST, SECOND, THIRD, FOURTH;
    }

    /**
    * @Discription: 获取两个时间段内所有日期 日期可跨年
    * @Created on: 2021/6/9 14:56
    * @author muyuanpei
    */
    public static List<String> getBetweenDate(String begin,String end){
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        List<String> betweenList = new ArrayList<String>();

        try{
            Calendar startDay = Calendar.getInstance();
            startDay.setTime(format.parse(begin));
            startDay.add(Calendar.DATE, -1);

            while(true){
                startDay.add(Calendar.DATE, 1);
                Date newDate = startDay.getTime();
                String newend=format.format(newDate);
                betweenList.add(newend);
                if(end.equals(newend)){
                    break;
                }
            }
        }catch (Exception e) {
            log.error("系统异常:",e);
        }

        return betweenList;
    }

    /****
     * 获取日期是第几度
     * 
     * @param date
     * @return
     */
    public static Quarter getQuarter(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int month = calendar.get(Calendar.MONTH);

        switch (month) {
        case Calendar.JANUARY:
        case Calendar.FEBRUARY:
        case Calendar.MARCH:
            return Quarter.FIRST;
        case Calendar.APRIL:
        case Calendar.MAY:
        case Calendar.JUNE:
            return Quarter.SECOND;
        case Calendar.JULY:
        case Calendar.AUGUST:
        case Calendar.SEPTEMBER:
            return Quarter.THIRD;
        default:
            return Quarter.FOURTH;
        }

    }

    public static class QuarterOfYearQuery implements TemporalQuery<Quarter> {
        @Override
        public Quarter queryFrom(TemporalAccessor temporal) {
            LocalDate now = LocalDate.from(temporal);

            if (now.isBefore(now.with(Month.APRIL).withDayOfMonth(1))) {
                return Quarter.FIRST;
            } else if (now.isBefore(now.with(Month.JULY).withDayOfMonth(1))) {
                return Quarter.SECOND;
            } else if (now.isBefore(now.with(Month.NOVEMBER).withDayOfMonth(1))) {
                return Quarter.THIRD;
            } else {
                return Quarter.FOURTH;
            }
        }
    }
    public static Integer whatWeek(Date date) {
        // SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        // Date date = format.parse(datetime);
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(date);
        Integer weekNumbe = calendar.get(Calendar.WEEK_OF_YEAR);
        return weekNumbe;
    }

    // 根据year年的第week周,查询本周的起止时间
    public static Map<String, Date> weekToDayFormate(int year, int week) {
        Map<String, Date> map = new HashMap<String, Date>();
        Calendar calendar = Calendar.getInstance();
        // ①.设置该年份的开始日期:第一个月的第一天
        calendar.set(year, 0, 1);
        // ②.计算出第一周还剩几天:+1是因为1号是1天
        int dayOfWeek = 7 - calendar.get(Calendar.DAY_OF_WEEK) + 2;
        // ③.周数减去第一周再减去要得到的周
        week = week - 2;
        // ④.计算起止日期
        calendar.add(Calendar.DAY_OF_YEAR, week * 7 + dayOfWeek);
        map.put("1", calendar.getTime());
        System.out.println("开始日期:" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
        map.put("2", addDay(calendar.getTime(), 1));
        map.put("3", addDay(calendar.getTime(), 2));
        map.put("4", addDay(calendar.getTime(), 3));
        map.put("5", addDay(calendar.getTime(), 4));
        map.put("6", addDay(calendar.getTime(), 5));
        calendar.add(Calendar.DAY_OF_YEAR, 6);
        map.put("7", calendar.getTime());
        System.out.println("结束日期:" + new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
        return map;
    }

    public static void main(String[] args) throws Exception {
        List<String> fullDayList = getFullDayList(new Date());
        System.out.println(fullDayList);

        quarterEnd(new Date());

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date sevenBeforeDate = DateUtils.addDay(new Date(), -6);
        String nowDateStr = format.format(new Date());
        String sevenBeforeDateStr = format.format(sevenBeforeDate);
        List<String> betweenDate = DateUtils.getBetweenDate(sevenBeforeDateStr, nowDateStr);
        System.out.println(nowDateStr);
    }



    /**
     * @Discription: 判断日期是否合法 返回true合法 false不合法
     * @Created on: 2021/4/2 16:12
     * @author muyuanpei
     */
    public static boolean isLegalDate(String dateStr) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        format.setLenient(false);
        try {
            Date date = format.parse(dateStr);
            return true;
        } catch (ParseException pe) {
            return false;
        }
    }

    public static boolean isDayBegin(Calendar cal) {
        return StringUtils.equals(DateUtils.formatDate(cal.getTime(), HMS_PATTERN), DateBeginPoint);
    }

    public static boolean isDayEnd(Calendar cal) {
        return StringUtils.equals(DateUtils.formatDate(cal.getTime(), HMS_PATTERN), DateEndPoint);
    }

    /**
     * 获取未来 第 past 天的日期
     *
     * @param past
     * @return
     */
    public static String getFetureDate(int past) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + past);
        Date today = calendar.getTime();
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String result = format.format(today);
        return result;
    }

    /**
     * 获取当前日期是星期几
     * 
     * @param dt
     * @return 当前日期是星期几
     */
    public static WeekEnum getWeekOfDate(Date dt) {

        Calendar cal = Calendar.getInstance();
        cal.setTime(dt);
        return WeekEnum.forCode(cal.get(Calendar.DAY_OF_WEEK));
    }

相关文章

网友评论

      本文标题:计算日期工具类

      本文链接:https://www.haomeiwen.com/subject/bpzfrktx.html