Java.util.Calendar類簡單介紹


Java.util.Calendar

       Calendar類是一個抽象類,里面提供了很多操作日歷的方法。Calendar類無法直接創建對象使用,需要利用里面的一個靜態方法getInstance(),該方法返回一個Calendar對象(子類對象)。該靜態方法使用默認時區和語言環境獲取一個日歷。這個靜態方法是必須知道的否則根本玩不轉Calendar。

1、Calendar類中的常量

Calendar cal = Calendar.getInstance();

cal.get(Calendar.DATE);//-----------------當天 1-31

cal.get(Calendar.DAY_OF_MONTH);//---------當天 1-31

cal.get(Calendar.DAY_OF_WEEK);//----從星期天開始計算,如果今天星期二,那么返回3

cal.get(Calendar.DAY_OF_YEAR);//-------------一年中的第多少天

cal.get(Calendar.HOUR);//-----------------------12小時制

cal.get(Calendar.HOUR_OF_DAY);//----------------24小時制,一般使用這個屬性賦值

cal.get(Calendar.MILLISECOND);//----------------獲取毫秒數

cal.get(Calendar.MINUTE);//---------------------分鍾

cal.get(Calendar.SECOND);//--------------------獲取秒

cal.get(Calendar.WEEK_OF_MONTH);//-----------一個月中的第幾周

cal.get(Calendar.WEEK_OF_YEAR);//-------------一年中的第幾周

cal.get(Calendar.MONTH);//-------月份,從0到11表示12個月份,比實際月份值小1 

cal.get(Calendar.AM_PM);//---0代表上午 1代表下午

星期日:Calendar.SUNDAY=1 

星期一:Calendar.MONDAY=2 

星期二:Calendar.TUESDAY=3 

星期三:Calendar.WEDNESDAY=4

星期四:Calendar.THURSDAY=5

星期五:Calendar.FRIDAY=6 

星期六:Calendar.SATURDAY=7 

1.1、常量小結:

       一般使用常量值進行賦值,賦值時,week 與 month 是要注意的,week 需要指定 setFirstDayOfWeek , 然而,月份則需要加減 1,賦值時一般采用年、月、日、時、分、秒,分別為:Calendar.Year、Calendar.Month、Calendar.Day_of_Month、Calendar.Hour_of_day、Calendar.Minute、Calendar.Second。

2、取值方法

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

Calendar cal = Calendar.getInstance();

System.out.println(cal.get(Calendar.DATE));//---當前日期

System.out.println(cal.getMinimum(Calendar.DATE));//---當前日期最小值

System.out.println(cal.getMaximum(Calendar.DATE));//---當前日期最大值

2.1、取值小結

     獲取最大值和最小值是最常用的方法,get中的常量可以放置Year、Month、Day等常量。

       時間的換算為一小時等於60分鍾等於3600秒等於3600000毫秒。

3、賦值方法

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

Calendar cal = Calendar.getInstance();

cal.set(Calendar.YEAR, 2019);//---設置年份

cal.set(Calendar.MONTH, 9);//---設置月份

cal.set(2019, 7, 30, 13, 13, 13);//---設置年月日時分秒

System.out.println(cal.get(Calendar.YEAR)+"|"+(Calendar.MONTH-1));

System.out.println(sdf.format(cal.getTime()));

打印

2019|1

2019-08-30

3.1、賦值小結

       第一種方法需要對每個(field)進行賦值,代碼的重復較大,第二種方法分別對字段(field)進行賦值效率較高。

 

4、計算

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Calendar cal = Calendar.getInstance();

cal.add(Calendar.MONTH, -1);

System.out.println(cal.get(Calendar.YEAR));

 

4.1、計算小結

       Add方法是根據日歷規則,為給定日歷字段添加或者減去指定的事件,對於add方法使用 XX_OF_XX 的field進行加減計算效果更佳,而且計算准確。 對於月份如果當前為8-31,那么,加一個月的話就是9-30,這個才是真正的准確。

5、日歷混合使用

5.1、獲取指定年月的最后一天

public static void getLastDayOfMonth(int year,int month) {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

       Calendar cal = Calendar.getInstance();

       cal.set(Calendar.YEAR, year);

       cal.set(Calendar.MONTH, month);

       cal.set(Calendar.DAY_OF_MONTH,cal.getActualMaximum(Calendar.DAY_OF_MONTH));

       System.out.println(sdf.format(cal.getTime()));

}

5.2、獲取當天的開始時間和結束時間

public void getThisToday(){

       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

       Calendar cal = Calendar.getInstance();

       cal.set(Calendar.HOUR_OF_DAY,0);

       cal.set(Calendar.MINUTE, 0);

       cal.set(Calendar.SECOND,0);

       String start = sdf.format(cal.getTime());

       cal.set(Calendar.HOUR_OF_DAY,23);

       cal.set(Calendar.MINUTE, 59);

       cal.set(Calendar.SECOND,59);

       String end = sdf.format(cal.getTime());

       System.out.println(start+"|"+end);

}

5.3、獲取一個星期的開始結束時間

public static void getThisWeekDate(){

       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

       Calendar ca = Calendar.getInstance();

       ca.setFirstDayOfWeek(Calendar.MONDAY);

       ca.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);

       ca.set(ca.get(Calendar.YEAR), ca.get(Calendar.MONTH),ca.get(Calendar.DATE),23,59,59);

       String end = sdf.format(ca.getTime());

       ca.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

       ca.set(Calendar.HOUR_OF_DAY,0);

       ca.set(Calendar.MINUTE, 0);

       ca.set(Calendar.SECOND,0);

       String start = sdf.format(ca.getTime());

       System.out.println(start+"|"+end);

}


免責聲明!

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



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