天天看點

Calendar用法

當我們需要處理時間問題的時候,我們首先想到的是Date類型,然而熟悉Date API的人一定都知道,這個類的許多方法都被廢棄了,取而代之的是Calendar類,Calendar的中文意思是“月曆”,是以用他來處理時間問題, 也算是實至名歸了,下面是我對Calendar的一些了解,不足之處請指正。 

一.Calendar是一個抽象類,不能直接New一個執行個體,可以有兩種方法得到它的執行個體: 

方法一:Calendar cal = new GregorianCalendar(); //GregorianCalendar是Calendar的實作類, 

方法二:Calendar cal = Calendar.getInstance(); 

通過以上方法獲得的執行個體,預設都是目前日期。我們可以通過以下代碼驗證一下: 

//此時是2010年8月25日15時18分18秒

Java代碼

Calendar cal = Calendar.getInstance();   

System.out.println("DAY_OF_WEEK: "+cal.get(Calendar.DAY_OF_WEEK));   

System.out.println("DAY_OF_MONTH: "+cal.get(Calendar.DAY_OF_MONTH));   

System.out.println("DAY_OF_YEAR: "+cal.get(Calendar.DAY_OF_YEAR));   

System.out.println("YEAR: "+cal.get(Calendar.YEAR));   

System.out.println("MONTH: "+cal.get(Calendar.MONTH));   

System.out.println("HOUR_OF_DAY : "+cal.get(Calendar.HOUR_OF_DAY));   

System.out.println("MINUTE : "+cal.get(Calendar.MINUTE)); System.out.println("SECOND : "+cal.get(Calendar.SECOND));  

得到的結果如下: 

DAY_OF_WEEK: 4 

DAY_OF_MONTH: 25 

DAY_OF_YEAR: 237 

YEAR: 2010 

MONTH: 7 

HOUR_OF_DAY : 15 

MINUTE : 18 

SECOND : 18 

注意: 

DAY_OF_WEEK表示星期幾。從星期日開始到星期六為一個周期,數字表示依次為:1,2,3……7。 

MONTH的表示是從數字0開始,是以月份應該是該數字+1. 

二. 很多情況下,我們需要進行時間的計算,如:将某個時間向前推幾小時、幾天、幾個月等。這個時候我們就需要對Calendar設定一個時間值。 

我們有幾種常見的設定方法: 

方法一:setTime(Date date) 

方法二: 

set(int field, int value) 

方法三: 

set(int year, int month, int date) 

set(int year, int month, int date, int hourOfDay, int minute) 

set(int year, int month, int date, int hourOfDay, int minute, int second) 

方法四:setTimeInMillis(long millis) 

在進行時間運算的時候,我們經常會用到如下方法: 

add(int field, int amount) 

示例代碼: 

Calendar cal = Calendar.getInstance(); 

cal.add(Calendar.DATE, 1); 

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

結果如下: 

Thu Aug 26 15:49:03 CST 2010 

以上是将時間向後推,如果要向前推,将第二個參數(amount)改成負數即可。 

三. 另外,Calendar還提供幾個非常好用的日期比較函數: 

after(Object when) 

before(Object when) 

equals(Object when) 

compareTo(Calendar anotherCalendar) 

需要注意的是:上面的Object參數類型必須是Calendar的執行個體(instance),否則就沒有意義了。示例代碼:

Calendar cal2 = Calendar.getInstance();   

cal2.setTimeInMillis(1282023123371L);   

System.out.println("Date1: " + cal.getTime());   

System.out.println("Date2: " + cal2.getTime());   

System.out.println("Date1 is later than Date2: " + cal.after(cal2));   

System.out.println("Date1 is earlier than Date2: " + cal.before(cal2));   

System.out.println("Date1 equals Date2: " + cal.equals(cal2));   

System.out.println("Date1 compare to Date2: " + cal.compareTo(cal2));  

運作結果為: 

Date1: Wed Aug 25 16:18:07 CST 2010 

Date2: Tue Aug 17 13:32:03 CST 2010 

Date1 is later than Date2: true 

Date1 is earlier than Date2: false 

Date1 equals Date2: false 

Date1 compare to Date2: 1 

compareTo()函數的傳回值有三個:0 1 -1,分别表示相等、大于(表示第一個時間離現在較近)、小于(表示第一個時間離現在較遠)。 

四. 總結 

相比Date類型,Calendar顯得更加靈活和強大。掌握Calendar的用法必将為你的開發之路打下良好的基礎。更多詳情請查閱JDK1.5幫助 文檔。