时间工具类(获取日期周,日期月的开始时间和结束时间)

时间工具类(获取日期周,日期月的开始时间和结束时间)

需要lombok依赖



package com.linkip.sentiment.util.date;
import com.whos.sa.analysis.Analysis;
import lombok.Data;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @author: craywen
 * @date: 2020-06-30 18:02
 * @desc:
 */
public class DateListUtils {
    
    


    public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");


    @Data
    public static class DateVo {
    
    
        private  String startDate;
        private  String endDate;
        private  DateVo (String startStr, String endStr){
    
    
            this.startDate=startStr;
            this.endDate=endStr;
        }
        private  DateVo (){
    
    

        }

    }

    /**
     * 日期段内获取月开始时间结束时间
     * @param startDate
     * @param endDate
     * @return
     */
    public static List<DateVo> getBetweenMonths(String startDate,String endDate) {
    
    
        List<DateVo> list = null;
        try {
    
    
            list = new ArrayList<DateVo>();
            String firstDay = "";
            String lastDay = "";
            Date d1 = sdf.parse(startDate);// 定义起始日期
            Date d2 =sdf.parse(endDate);// 定义结束日期

            Calendar dd = Calendar.getInstance();// 定义开始日期实例
            Calendar c = Calendar.getInstance();//结束日期
            dd.setTime(d1);// 设置日期起始时间
            c.setTime(d2);
            Calendar cale = Calendar.getInstance();
            int startDay = d1.getDate();
            int endDay = d2.getDate();
            DateVo keyValueForDate = null;
            while (dd.getTime().before(d2)) {
    
    // 判断是否到结束日期
                keyValueForDate = new DateVo();
                cale.setTime(dd.getTime());
                if(dd.getTime().equals(d1)){
    
    
                    if((dd.get(Calendar.MONTH) + 1)==(c.get(Calendar.MONTH) + 1)&&(dd.get(Calendar.YEAR) + 1)==(c.get(Calendar.YEAR) + 1)){
    
    
                        if(startDay==1)
                        {
    
    
                            cale.set(Calendar.DATE,endDay-startDay+1  );
                        }else{
    
    
                            cale.set(Calendar.DATE,endDay);
                        }

                    }else{
    
    
                        cale.set(Calendar.DAY_OF_MONTH, dd
                                .getActualMaximum(Calendar.DAY_OF_MONTH));
                    }
                    lastDay = sdf.format(cale.getTime());
                    keyValueForDate.setStartDate(sdf.format(d1));
                    keyValueForDate.setEndDate(lastDay);
                }else if(dd.get(Calendar.MONTH) == d2.getMonth() && dd.get(Calendar.YEAR) == c.get(Calendar.YEAR)){
    
    
                    cale.set(Calendar.DAY_OF_MONTH,1);//取第一天
                    firstDay = sdf.format(cale.getTime());
                    keyValueForDate.setStartDate(firstDay);
                    keyValueForDate.setEndDate(sdf.format(d2));
                }else {
    
    
                    cale.set(Calendar.DAY_OF_MONTH,1);//取第一天
                    firstDay = sdf.format(cale.getTime());
                    cale.set(Calendar.DAY_OF_MONTH, dd
                            .getActualMaximum(Calendar.DAY_OF_MONTH));
                    lastDay = sdf.format(cale.getTime());
                    keyValueForDate.setStartDate(firstDay);
                    keyValueForDate.setEndDate(lastDay);
                }
                list.add(keyValueForDate);
                dd.add(Calendar.MONTH, 1);// 进行当前日期月份加1
            }
            if(endDay<=startDay){
    
    
                keyValueForDate = new DateVo();
                cale.setTime(d2);
                cale.set(Calendar.DAY_OF_MONTH,1);//取第一天
                firstDay = sdf.format(cale.getTime());
                keyValueForDate.setStartDate(firstDay);
                keyValueForDate.setEndDate(sdf.format(d2));
                list.add(keyValueForDate);
            }
        } catch (ParseException e) {
    
    
            return null;
        }
        return list;
    }




    /**
     * 获取两个日期之间的所有日期
     * @param startDate
     * @param endDate
     * @return
     * @throws ParseException
     */
    public static List<DateVo> getBetweenDates(String startDate, String endDate) throws ParseException {
    
    
        Date start = sdf.parse(startDate);//定义起始日期
        Date end = sdf.parse(endDate);//定义结束日期
	   List<DateVo> result = new ArrayList<DateVo>();
	   Calendar tempStart = Calendar.getInstance();
	    tempStart.setTime(start);
        Calendar tempEnd = Calendar.getInstance();
        tempEnd.setTime(end);
        while (tempStart.before(tempEnd) || tempStart.equals(tempEnd)) {
    
    
            DateVo dateVo= new DateVo();
            dateVo.setStartDate(sdf.format(tempStart.getTime()));
            dateVo.setEndDate(sdf.format(tempStart.getTime()));
            result.add(dateVo);
             tempStart.add(Calendar.DAY_OF_YEAR, 1);
         }
	     return result;
    }


    /**
     * 获取两个日期之间的所有日期
     * @param startDate
     * @param endDate
     * @return
     * @throws ParseException
     */
    public static List<DateVo> getBetweenWeeks(String startDate, String endDate) throws ParseException{
    
    
        List<String> listWeekOrMonth = new ArrayList<String>();
        List<DateVo> dateVoList = new ArrayList<DateVo>();
        Date sDate = sdf.parse(startDate);
        Calendar sCalendar = Calendar.getInstance();
        sCalendar.setFirstDayOfWeek(Calendar.MONDAY);
        sCalendar.setTime(sDate);
        Date eDate = sdf.parse(endDate);
        Calendar eCalendar = Calendar.getInstance();
        eCalendar.setFirstDayOfWeek(Calendar.MONDAY);
        eCalendar.setTime(eDate);
        boolean bool =true;
            while(sCalendar.getTime().getTime()<eCalendar.getTime().getTime()){
    
    
                if(bool||sCalendar.get(Calendar.DAY_OF_WEEK)==2||sCalendar.get(Calendar.DAY_OF_WEEK)==1){
    
    
                    listWeekOrMonth.add(sdf.format(sCalendar.getTime()));
                    bool = false;
                }
                sCalendar.add(Calendar.DAY_OF_MONTH, 1);
             }
            listWeekOrMonth.add(sdf.format(eCalendar.getTime()));
            if(listWeekOrMonth.size()%2!=0){
    
    
                listWeekOrMonth.add(sdf.format(eCalendar.getTime()));
            }
        for (int i = 0; i < listWeekOrMonth.size()-1; i++) {
    
    
            if(i%2==0){
    
    
                DateVo dateVo= new DateVo();
                dateVo.setStartDate(listWeekOrMonth.get(i));
                dateVo.setEndDate(listWeekOrMonth.get(i+1));
                dateVoList.add(dateVo);
            }
          }
        return dateVoList;
    }

    public static void main(String[] args) throws ParseException {
    
    
        System.out.println("=======month=======");
        List<DateVo> betweenMonths = getBetweenMonths("2019-06-13", "2020-07-18");
        for (DateVo betweenDate : betweenMonths) {
    
    
            System.out.println(betweenDate.getStartDate()+"===="+betweenDate.getEndDate());
        }
        System.out.println("=======week=======");
        List<DateVo> betweenWeeks = getBetweenWeeks("2020-07-01", "2020-07-09");
        for (DateVo betweenDate : betweenWeeks) {
    
    
            System.out.println(betweenDate.getStartDate()+"===="+betweenDate.getEndDate());
        }
        System.out.println("======day========");
        List<DateVo> betweenDates = getBetweenDates("2020-06-10", "2020-07-09");
        for (DateVo betweenDate : betweenDates) {
    
    
            System.out.println(betweenDate.getStartDate()+"===="+betweenDate.getEndDate());
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38893133/article/details/107336836