各種時間處理的工具類(持續更新。。。)

目錄

6.計算兩個日期相差的天數

5.返回一個月的日期列表

1.獲取兩個時間段之間的所有時間

2.獲取兩個時間相差的月份數

3.傳入一個時間,返回這個月的開始和結束時間

4.使用Calendar月份加1


6.計算兩個日期相差的天數

/**
     * 傳入兩個日期,計算相差的天數
     *
     * return int 相隔的天數, 如2018-01-01  -  2018-01-02  這樣計算成兩天
     * */
    public static int getBeginTimeToEndTimeDays (Date beginDate, Date endDate) {

        if (beginDate.getTime() > endDate.getTime()) {
            throw new BusinessException("開始時間不能大於結束時間");
        }

        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(beginDate);

        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(endDate);
        int day1= cal1.get(Calendar.DAY_OF_YEAR);
        int day2 = cal2.get(Calendar.DAY_OF_YEAR);

        int year1 = cal1.get(Calendar.YEAR);
        int year2 = cal2.get(Calendar.YEAR);
        if(year1 != year2)
        {
            int timeDistance = 0 ;
            for(int i = year1 ; i < year2 ; i ++)
            {
                if(i%4==0 && i%100!=0 || i%400==0)
                {
                    timeDistance += 366;
                }
                else    //不是閏年
                {
                    timeDistance += 365;
                }
            }

            return timeDistance + (day2-day1) + 1;
        }
        else    //不同年
        {
            System.out.println("判斷day2 - day1 : " + (day2-day1));
            return day2-day1+1;
        }
    }

5.返回一個月的日期列表

/**
     * 獲取一個月的日期列表
     */
    private List<Date> getMonthDateList (Integer year, Integer month) {
        List<Date> monthDateList = new ArrayList<>();

        //構造本月的開始日期
        Calendar thisMonthFirst = Calendar.getInstance();
        thisMonthFirst.set(year, month-1, 1);

        //構造本月的結束日期
        Calendar thisMonthLast = Calendar.getInstance();
        thisMonthLast.setTime(thisMonthFirst.getTime());
        thisMonthLast.set( Calendar.DAY_OF_MONTH, thisMonthFirst.getActualMaximum(Calendar.DAY_OF_MONTH) );

        int monthBeginInr = thisMonthFirst.get(Calendar.DAY_OF_MONTH);
        int monthEndInr = thisMonthLast.get(Calendar.DAY_OF_MONTH);

        Calendar nowDate = Calendar.getInstance();
        for (int i=monthBeginInr; i<=monthEndInr; i++) {
            nowDate.set(year, month-1, i);
            monthDateList.add(nowDate.getTime());
        }

        return monthDateList;
    }

1.獲取兩個時間段之間的所有時間

    /**
     * 獲取兩個時間段之間的所有時間
     *
     * @param beginDate 開始時間
     * @param endDate 結束時間
     *
     * @return dateList
     */
    private static List<Date> getBeginToEndDateList(Date beginDate, Date endDate) {
        List<Date> dateList = new ArrayList<>();

        Calendar beginCalendar = Calendar.getInstance();
        Calendar endCalendar = Calendar.getInstance();
        beginCalendar.setTime(beginDate);
        endCalendar.setTime(endDate);

        //計算兩個日期相差的天數
        int aa = DateUtil.getBeginTimeToEndTimeDays(beginDate, endDate);
        for (int i=0; i<aa; i++) {
            dateList.add(beginCalendar.getTime());
            beginCalendar.add(Calendar.DAY_OF_YEAR, 1);
        }

        return dateList;
    }

2.獲取兩個時間相差的月份數

    /**
     * 判斷兩個日期相差幾個月
     * */
    private static int getBeginToEndDateMonth(Date beginDate, Date endDate) {
        int result;

        Calendar startCalendar = Calendar.getInstance();
        Calendar endCalendar = Calendar.getInstance();
        startCalendar.setTime(beginDate);
        endCalendar.setTime(endDate);

        //判斷日期大小
        if(startCalendar.after(endCalendar)){
            Calendar temp = startCalendar;
            startCalendar = endCalendar;
            endCalendar = temp;
        }
        int startYear = startCalendar.get(Calendar.YEAR);
        int endYear = endCalendar.get(Calendar.YEAR);
        int startMonth = startCalendar.get(Calendar.MONTH);
        int endMonth = endCalendar.get(Calendar.MONTH);
        result = (endYear - startYear)*12+(endMonth-startMonth);

        return result;
    }

3.傳入一個時間,返回這個月的開始和結束時間

   /**
     * 傳入一個時間,返回這個月的開始和結束時間
     * */
    public static Map<String, Date> getThisMonthBeginAndEndDate(Date nowDate) {
        Map<String, Date> dateMap = new HashMap<>(2);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(nowDate);

        //構造本月的開始日期
        Calendar thisMonthFirst = Calendar.getInstance();
        thisMonthFirst.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1);

        //構造本月的結束日期
        Calendar thisMonthLast = Calendar.getInstance();
        thisMonthLast.setTime(thisMonthFirst.getTime());
        thisMonthLast.set( Calendar.DAY_OF_MONTH, thisMonthFirst.getActualMaximum(Calendar.DAY_OF_MONTH) );

        dateMap.put("beginDate", thisMonthFirst.getTime());
        dateMap.put("endDate", thisMonthLast.getTime());

        return dateMap;
    }

4.使用Calendar月份加1

public static void main(String[] args) throws Exception{
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String dateToString = "2019-11-2";
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateFormat.parse(dateToString));


        for (int i=0; i<30; i++) {
            calendar.add(Calendar.MONTH, +1);
            System.out.println("=========>當前時間: " + dateFormat.format(calendar.getTime()));
        }

    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章