Java時間日期DateUtil


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {

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

    /*
	獲取昨天的日期
	 */
    public static Date getYesterday(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE,-1);
        Date yesterday = cal.getTime();
        return yesterday;
    }

    /*
    獲取傳入時間的日份
     */
    public static int getDay(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(Calendar.DATE);
    }

    /**
     * 獲取傳入時間的月份
     */
    public static int getMonth(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(Calendar.MONTH) + 1;
    }

    /**
     * 獲取傳入時間的季度
     */
    public static int getQuarter(Date date) {
        int month = getMonth(date);
        if (month <= 3)
            return 1;
        else if (month <= 6)
            return 2;
        else if (month <= 9)
            return 3;
        else
            return 4;
    }

    /**
     * 獲取傳入時間的年份
     */
    public static int getYear(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(Calendar.YEAR);
    }

    /**
     * 獲取傳入時間月份天數
     */
    public static int getCurrentMonthDay(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DATE, 1);
        cal.roll(Calendar.DATE, -1);
        return cal.get(Calendar.DATE);
    }

    /**
     * 獲得傳入時間為是星期幾
     */
    public static int getWeekDay(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int weekDay = c.get(Calendar.DAY_OF_WEEK);
        return weekDay - 1;
    }

    /*
    獲取所在周指定星期幾的日期Date
     */
    public static Date getWeekDayDate(Date date, int num) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        switch (num) {
            case 1:
                c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
                break;
            case 2:
                c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
                break;
            case 3:
                c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
                break;
            case 4:
                c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
                break;
            case 5:
                c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
                break;
            case 6:
                c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
                break;
            case 7:
                // c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
                int weekday = c.get(Calendar.DAY_OF_WEEK);
                c.add(Calendar.DATE, 8 - weekday);
                break;
        }
        return c.getTime();
    }

    /*
    獲取傳入時間所在周第一天,周一
     */
    public static Date getFirstWeekDay(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        try {
            int weekday = c.get(Calendar.DAY_OF_WEEK) - 2;
            c.add(Calendar.DATE, -weekday);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return c.getTime();
    }

    /*
    獲取傳入時間所在周最后一天,周日
     */
    public static Date getLastWeekDay(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        try {
            int weekday = c.get(Calendar.DAY_OF_WEEK);
            c.add(Calendar.DATE, 8 - weekday);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return c.getTime();
    }

    /**
     * 根據日期獲取月初第一天
     */
    public static Date getFirstMonthDay(Date date) {
        Calendar cal = Calendar.getInstance();// 獲取當前日期
        cal.setTime(date);
        cal.add(Calendar.MONTH, 0);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        return cal.getTime();
    }

    /**
     * 根據日期獲取月末最后一天
     */
    public static Date getLastMonthDay(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        return cal.getTime();
    }

    /*
    根據日期獲取所在季度的第一天
     */
    public static Date getFirstQuarterDay(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int currentMonth = cal.get(Calendar.MONTH) + 1;
        try {
            if (currentMonth >= 1 && currentMonth <= 3)
                cal.set(Calendar.MONTH, 0);
            else if (currentMonth >= 4 && currentMonth <= 6)
                cal.set(Calendar.MONTH, 3);
            else if (currentMonth >= 7 && currentMonth <= 9)
                cal.set(Calendar.MONTH, 6);
            else if (currentMonth >= 10 && currentMonth <= 12)
                cal.set(Calendar.MONTH, 9);
            cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cal.getTime();
    }

    /*
    根據日期獲取所在季度的最后一天
     */
    public static Date getLastQuarterDay(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int currentMonth = cal.get(Calendar.MONTH) + 1;
        try {
            if (currentMonth >= 1 && currentMonth <= 3)
                cal.set(Calendar.MONTH, 2);
            else if (currentMonth >= 4 && currentMonth <= 6)
                cal.set(Calendar.MONTH, 5);
            else if (currentMonth >= 7 && currentMonth <= 9)
                cal.set(Calendar.MONTH, 8);
            else if (currentMonth >= 10 && currentMonth <= 12)
                cal.set(Calendar.MONTH, 11);
            cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cal.getTime();
    }

    /*
    所在年前/后半年開始日期
     */
    public static Date getHalfYearStartTime(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int currentMonth = c.get(Calendar.MONTH) + 1;
        if (currentMonth >= 1 && currentMonth <= 6) {
            c.set(Calendar.MONTH, 0);
        } else if (currentMonth >= 7 && currentMonth <= 12) {
            c.set(Calendar.MONTH, 6);
        }
        c.set(Calendar.DATE, 1);
        return c.getTime();
    }

    /**
     所在年前/后半年的結束時間
     */
    public static Date getHalfYearEndTime(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int currentMonth = c.get(Calendar.MONTH) + 1;
        if (currentMonth >= 1 && currentMonth <= 6) {
            c.set(Calendar.MONTH, 5);
            c.set(Calendar.DATE, 30);
        } else if (currentMonth >= 7 && currentMonth <= 12) {
            c.set(Calendar.MONTH, 11);
            c.set(Calendar.DATE, 31);
        }
        return c.getTime();
    }

    /**
     * 根據日期獲取年第一天
     */
    public static Date getYearFirstDay(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int year=calendar.get(Calendar.YEAR);
        Calendar cd = Calendar.getInstance();
        cd.clear();
        cd.set(Calendar.YEAR, year);
        cd.roll(Calendar.DAY_OF_YEAR,0);
        Date currYearLast = cd.getTime();
        return currYearLast;
    }

    /*
	獲取當月指定天數日期
	 */
    public static Date getDateByDay(Date date, int day) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.set(Calendar.DATE, day);
        return cal.getTime();
    }

    /*
	獲取上月指定天數日期
	 */
    public static Date getLastMonthByDay(Date date, int day) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int month = cal.get(Calendar.MONTH);
        cal.set(Calendar.MONTH, month - 1);
        cal.set(Calendar.DATE, day);
        return cal.getTime();
    }

    /**
     * 獲取傳入時間所在季度總天數
     */
    public static int getCurrentQuarterDay(Date date) {
        Date firstDayDate = getFirstQuarterDay(date);
        Date lastDayDate = getLastQuarterDay(date);
        int day = (int) ((lastDayDate.getTime() - firstDayDate.getTime()) / (24*3600*1000) + 1);
        return day;
    }

    /*
    判斷日期是否為周日
     */
    public static boolean isWeekEnd(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
            return true;
        } else{
            return false;
        }
    }

    /*
    判斷日期是否為月末
     */
    public static boolean isMonthEnd(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int getDay = calendar.get(Calendar.DAY_OF_MONTH);
        if(getDay == calendar.getActualMaximum(Calendar.DAY_OF_MONTH)){
            return true;
        }else{
            return false;
        }
    }

    /*
    判斷日期是否為季末(最后一天)
     */
    public static boolean isQuarterEnd(Date date) {
        Calendar c = Calendar.getInstance();
        c.setTime(date);
        int currentMonth = c.get(Calendar.MONTH) + 1;
        Date dt = null;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            if (currentMonth >= 1 && currentMonth <= 3) {
                c.set(Calendar.MONTH, 2);
                c.set(Calendar.DATE, 31);
            } else if (currentMonth >= 4 && currentMonth <= 6) {
                c.set(Calendar.MONTH, 5);
                c.set(Calendar.DATE, 30);
            } else if (currentMonth >= 7 && currentMonth <= 9) {
                c.set(Calendar.MONTH, 8);
                c.set(Calendar.DATE, 30);
            } else if (currentMonth >= 10 && currentMonth <= 12) {
                c.set(Calendar.MONTH, 11);
                c.set(Calendar.DATE, 31);
            }
            dt = sdf.parse(sdf.format(c.getTime()));
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (date.compareTo(dt) == 0) {
            return true;
        } else {
            return false;
        }
    }

    /*
    據日期獲取去年年末
     */
    public static Date getLastYearLastDay(Date date){
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int year=calendar.get(Calendar.YEAR)-1;
        Calendar cd = Calendar.getInstance();
        cd.clear();
        cd.set(Calendar.YEAR, year);
        cd.roll(Calendar.DAY_OF_YEAR, -1);
        Date currYearLast = cd.getTime();
        return currYearLast;
    }

    /**
     * 屬於本年第幾天
     */
    public static int getYearDayIndex(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(date);
        return calendar.get(Calendar.DAY_OF_YEAR);
    }

    /**
     * 屬於本年第幾周
     */
    public static int getYearWeekIndex(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(date);
        return calendar.get(Calendar.WEEK_OF_YEAR);
    }

    /*
    獲取兩個日期間的天數,直接傳入Date
     */
    public static Long getDayByDates(Date startDate, Date endDate) {
        Long day = (endDate.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000);
        return day;
    }

    /*
    獲取兩個日期間的天數,直接傳入StrDate
     */
    public static Long getDayByStrDates(String startStrDate, String endStrDate) throws ParseException {
        Date startDate = sdf.parse(startStrDate);
        Date endDate = sdf.parse(endStrDate);
        Long day = (endDate.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000);
        return day;
    }

    /**
     * 判斷是否閏年
     * 詳細設計: 1.被400整除是閏年,否則: 2.不能被4整除則不是閏年 3.能被4整除同時不能被100整除則是閏年
     *            3.能被4整除同時能被100整除則不是閏年
     */
    public static boolean isLeapYear(Date date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int year = cal.get(Calendar.YEAR);
        if ((year % 400) == 0) {
            return true;
        } else if ((year % 4) == 0) {
            if ((year % 100) == 0) {
                return false;
            } else {
                return true;
            }
        } else {
            return false;
        }
    }


    public static void main(String[] args) throws ParseException {
        Date date = new Date();
        System.out.println("前一天日期為:" + sdf.format(getYesterday(date)));
        System.out.println("該日期的日份:" + getDay(date));
        System.out.println("該日期的月份:" + getMonth(date));
        System.out.println("該日期的季度:" + getQuarter(date));
        System.out.println("該日期的年份:" + getYear(date));
        System.out.println("所在月總天數:" + getCurrentMonthDay(date));
        System.out.println("所在季度總天數:" + getCurrentQuarterDay(date));
        System.out.println("該日期為本周星期:" + getWeekDay(date));
        System.out.println("所在周的星期天的日期:" + sdf.format(getWeekDayDate(date, 7)));
        System.out.println("所在周第一天日期:" + sdf.format(getFirstWeekDay(date)));
        System.out.println("所在周最后一天日期:" + sdf.format(getLastWeekDay(date)));
        System.out.println("所在月第一天日期:" + sdf.format(getFirstMonthDay(date)));
        System.out.println("所在月最后一天日期:" + sdf.format(getLastMonthDay(date)));
        System.out.println("所在季度第一天日期:" + sdf.format(getFirstQuarterDay(date)));
        System.out.println("所在季度最后一天日期:" + sdf.format(getLastQuarterDay(date)));
        System.out.println("所在年前/后半年開始日期:" + sdf.format(getHalfYearStartTime(date)));
        System.out.println("所在年前/后半年結束日期:" + sdf.format(getHalfYearEndTime(date)));
        System.out.println("所在年第一天日期:" + sdf.format(getYearFirstDay(date)));
        System.out.println("所在月指定天數日期:" + sdf.format(getDateByDay(date, 10)));
        System.out.println("上月指定天數日期:" + sdf.format(getLastMonthByDay(date, 10)));
        System.out.println("是否為周日:" + isWeekEnd(date));
        System.out.println("是否為月末:" + isMonthEnd(date));
        System.out.println("是否為季末:" + isQuarterEnd(date));
        System.out.println("去年最后一天日期:" + sdf.format(getLastYearLastDay(date)));
        System.out.println("屬於本年第幾天:" + getYearDayIndex(date));
        System.out.println("屬於本年第幾周:" + getYearWeekIndex(date));
        System.out.println("兩個日期的間隔天數:" + getDayByDates(sdf.parse("2019-10-28"), date));
        System.out.println("兩個日期的間隔天數:" + getDayByStrDates("2019-10-23", "2019-10-30"));
        System.out.println("是否為閏年:" + isLeapYear(date));
    }
}

  測試結果:

前一天日期為:2019-10-29
該日期的日份:30
該日期的月份:10
該日期的季度:4
該日期的年份:2019
所在月總天數:31
所在季度總天數:92
該日期為本周星期:3
所在周的星期天的日期:2019-11-03
所在周第一天日期:2019-10-28
所在周最后一天日期:2019-11-03
所在月第一天日期:2019-10-01
所在月最后一天日期:2019-10-31
所在季度第一天日期:2019-10-01
所在季度最后一天日期:2019-12-31
所在年前/后半年開始日期:2019-07-01
所在年前/后半年結束日期:2019-12-31
所在年第一天日期:2019-01-01
所在月指定天數日期:2019-10-10
上月指定天數日期:2019-09-10
是否為周日:false
是否為月末:false
是否為季末:false
去年最后一天日期:2018-12-31
屬於本年第幾天:303
屬於本年第幾周:44
兩個日期的間隔天數:2
兩個日期的間隔天數:7
是否為閏年:false

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM