當我們需要處理時間問題的時候,我們首先想到的是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幫助 文檔。