java時間處理Calendar使用小記
阿新 • • 發佈:2019-02-07
我理解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
注意: 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())); }