1. 程式人生 > >java時間處理Calendar使用小記

java時間處理Calendar使用小記

我理解Calendar類主要對於獲取某些特定特殊的時間時特別方便,比如月的最後一天,月的某一個星期,星期的某一天,年的某一天等等,並且和date類相互可以轉換
注意: Calendar.MONTH 的值是從0-11表示12個月
JANUARY   0
FEBRUARY  1
MARCH     2
APRIL     3
MAY       4
JUNE      5
JULY      6
AUGUST    7
SEPTEMBER 8
OCTOBER   9
NOVEMBER  10

DECEMBER  11

    /**
    * 取得當天0點時間   2017-02-04 00:00:00
    * @return  毫秒級時間戳
    */
    public static long getDayZero(long date) {
        Calendar calendar = Calendar.getInstance();
        //設定為入參時間
        calendar.setTimeInMillis(date);
        //取得當天的起始時間
        calendar.set(Calendar.HOUR_OF_DAY,0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);

        //取得當天的結束時間
        calendar.add(Calendar.DATE,1);
        calendar.add(Calendar.MILLISECOND,-1);

        return calendar.getTimeInMillis();
    }

    /**
     * 入參時間所在月份的第一天
     * @param date 入參時間 毫秒
     * @return
     */
    public static long getFirstDayOfMonth(long date){
        Calendar calendar = Calendar.getInstance();
        //設定為入參時間
        calendar.setTimeInMillis(date);

        calendar.set(Calendar.DAY_OF_MONTH,1);
        //可以設定當天的起始時間或者結束時間
        //起始時間  0點0分0秒0毫秒
        calendar.set(Calendar.HOUR_OF_DAY,0);
        calendar.set(Calendar.MINUTE,0);
        calendar.set(Calendar.SECOND,0);
        calendar.set(Calendar.MILLISECOND,0);

        //結束時間  23點59分59秒999毫秒
        calendar.set(Calendar.HOUR_OF_DAY,23);
        calendar.set(Calendar.MINUTE,59);
        calendar.set(Calendar.SECOND,59);
        calendar.set(Calendar.MILLISECOND,999);
        return calendar.getTimeInMillis();
    }
    /**
     * 入參時間所在月份的最後一天 有很多方式實現
     * @param date 入參時間 毫秒
     * @return
     */
    public static long getLastDayOfMonth(long date){
        Calendar calendar = Calendar.getInstance();
        //設定為入參時間
        calendar.setTimeInMillis(date);

        /*---------------------------------------------*/
        //當前時間月份加一,設定天是月份的第一天,再減一天就是當月的最後一天
        calendar.add(Calendar.MONTH,1);
        calendar.set(Calendar.DAY_OF_MONTH,1);
        calendar.add(Calendar.DATE,-1);

        //可以設定當天的起始時間或者結束時間
        //起始時間  0點0分0秒0毫秒
        calendar.set(Calendar.HOUR_OF_DAY,0);
        calendar.set(Calendar.MINUTE,0);
        calendar.set(Calendar.SECOND,0);
        calendar.set(Calendar.MILLISECOND,0);
        /*--------------------如果不關心具體時間也可以根據毫秒減一獲得-------------------------*/

        calendar.add(Calendar.MONTH,1);
        calendar.set(Calendar.DAY_OF_MONTH,1);
        //設定為當天的起始時間 0點0分0秒0毫秒 ,再將時間減掉一毫秒
        calendar.set(Calendar.HOUR_OF_DAY,0);
        calendar.set(Calendar.MINUTE,0);
        calendar.set(Calendar.SECOND,0);
        calendar.set(Calendar.MILLISECOND,0);
        calendar.add(Calendar.MILLISECOND,-1);

        return calendar.getTimeInMillis();
    }
    /**
     * 入參時間上個月份的最後一天
     * @param date 入參時間 毫秒
     * @return
     */
    public static long getPreviousMonthLastDay(long date){
        Calendar calendar = Calendar.getInstance();
        //設定為入參時間
        calendar.setTimeInMillis(date);

        calendar.set(Calendar.DAY_OF_MONTH,0);

        return calendar.getTimeInMillis();
    }

    /**
     * 入參時間的前一天
     * 獲得當前時間的前幾天,幾分鐘,幾秒 直接使用 calendar.add()填寫需要增加或者減少的屬性 和值 即可
     * @param date 入參時間 毫秒
     * @return
     */
    public static long getPreviousDay(long date){
        Calendar calendar = Calendar.getInstance();
        //設定為入參時間
        calendar.setTimeInMillis(date);

        calendar.add(Calendar.DATE,-1);
        //calendar.add(Calendar.MONDAY,-1);
        //calendar.add(Calendar.YEAR,-1);
        //calendar.add(Calendar.HOUR,-1);
        //calendar.add(Calendar.MINUTE,-1);
        //calendar.add(Calendar.SECOND,-1);
        //calendar.add(Calendar.MILLISECOND,-1);

        return calendar.getTimeInMillis();
    }

    /**
     * 入參時間是當月的第幾個week
     * @param date
     * @return
     */
    public static int getWeekOfMonth(long date){
        Calendar calendar = Calendar.getInstance();
        //設定為入參時間
        calendar.setTimeInMillis(date);

        return calendar.get(Calendar.WEEK_OF_MONTH);
    }

    /**
     * 入參時間是當年的第幾個week
     * @param date
     * @return
     */
    public static int getWeekOfYear(long date){
        Calendar calendar = Calendar.getInstance();
        //設定為入參時間
        calendar.setTimeInMillis(date);

        return calendar.get(Calendar.WEEK_OF_YEAR);
    }

    /**
     * 入參時間是當年的第幾天
     * @param date
     * @return
     */
    public static int getDayOfYear(long date){
        Calendar calendar = Calendar.getInstance();
        //設定為入參時間
        calendar.setTimeInMillis(date);

        return calendar.get(Calendar.DAY_OF_YEAR);
    }

    /**
     * 入參時間是當月的第幾天
     * @param date
     * @return
     */
    public static int getDayOfMonth(long date){
        Calendar calendar = Calendar.getInstance();
        //設定為入參時間
        calendar.setTimeInMillis(date);

        return calendar.get(Calendar.DAY_OF_MONTH);
    }
    /**
     * 獲取前N個月的起始時間,n為0表示當前月,1表示前一個月
     * @param n
     * @return 單位毫秒
     */
    public static long getLastNMonthStartTime(int n) {
        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);
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.add(Calendar.MONTH, 0 - n);
        return calendar.getTimeInMillis();
    }
    /**
     * 獲取前N個月的終止時間,n為0表示當前月,1表示前一個月
     * @param n
     * @return 單位毫秒
     */
    public static long getLastNMonthEndTime(int n) {
        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);
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.add(Calendar.MONTH, 0 - n + 1);
        calendar.add(Calendar.MILLISECOND ,-1);
        return calendar.getTimeInMillis();
    }
    public static void main(String[] args){
        System.out.println(DateTimeUtil.getDateTimeString(getDayZero(System.currentTimeMillis())));
        System.out.println(getWeekOfMonth(System.currentTimeMillis()));
        System.out.println(getWeekOfYear(System.currentTimeMillis()));
        System.out.println(getDayOfMonth(System.currentTimeMillis()));
        System.out.println(getDayOfYear(System.currentTimeMillis()));
    }