在JDK1.0中,Date類是惟一的一個表明時間的類,可是因爲Date類不便於實現國際化,因此從JDK1.1版本開始,推薦使用Calendar類進行時間和日期處理。這裏簡單介紹一下Date類的使用。程序員
1、使用Date類表明當前系統時間spa
Date d = new Date();設計
System.out.println(d);對象
使用Date類的默認構造方法建立出的對象就表明當前時間,因爲Date類覆蓋了toString方法,因此能夠直接輸出Date類型的對象,顯示的結果以下:get
Sun Mar 08 16:35:58 CST 2009基礎
在該格式中,Sun表明Sunday(週日),Mar表明March(三月),08表明8號,CST表明China Standard Time(中國標準時間,也就是北京時間(東八區))。date
2、使用Date類表明指定的時間程序
Date d1 = new Date(2009-1900,3-1,9);方法
System.out.println(d1);im
使用帶參數的構造方法,能夠構造指定日期的Date類對象,Date類中年份的參數應該是實際須要表明的年份減去1900,實際須要表明的月份減去1之後的值。例如上面的示例代碼表明就是2009年3月9號。
實際表明具體的年月日時分秒的日期對象,和這個相似。
3、得到Date對象中的信息
Date d2 = new Date();
//年份
int year = d2.getYear() + 1900;
//月份
int month = d2.getMonth() + 1;
//日期
int date = d2.getDate();
//小時
int hour = d2.getHours();
//分鐘
int minute = d2.getMinutes();
//秒
int second = d2.getSeconds();
//星期幾
int day = d2.getDay();
System.out.println("年份:" + year);
System.out.println("月份:" + month);
System.out.println("日期:" + date);
System.out.println("小時:" + hour);
System.out.println("分鐘:" + minute);
System.out.println("秒:" + second);
System.out.println("星期:" + day);
使用Date類中對應的get方法,能夠得到Date類對象中相關的信息,須要注意的是使用getYear得到是Date對象中年份減去1900之後的值,因此須要顯示對應的年份則須要在返回值的基礎上加上1900,月份相似。在Date類中還提供了getDay方法,用於得到Date對象表明的時間是星期幾,Date類規定週日是0,週一是1,週二是2,後續的依次類推。
4、Date對象和相對時間之間的互轉
Date d3 = new Date(2009-1900,3-1,10);
long time = 1290876532190L;
//將Date類的對象轉換爲相對時間
long t = d3.getTime();
System.out.println(t);
//將相對時間轉換爲Date類的對象
Date d4 = new Date(time);
System.out.println(d4);
使用Date對象中的getTime方法,能夠將Date類的對象轉換爲相對時間,使用Date類的構造方法,能夠將相對時間轉換爲Date類的對象。通過轉換之後,既方便了時間的計算,也使時間顯示比較直觀了。
從JDK1.1版本開始,在處理日期和時間時,系統推薦使用Calendar類進行實現。在設計上,Calendar類的功能要比Date類強大不少,並且在實現方式上也比Date類要複雜一些,下面就介紹一下Calendar類的使用。
Calendar類是一個抽象類,在實際使用時實現特定的子類的對象,建立對象的過程對程序員來講是透明的,只須要使用getInstance方法建立便可。
1、使用Calendar類表明當前時間
Calendar c = Calendar.getInstance();
因爲Calendar類是抽象類,且Calendar類的構造方法是protected的,因此沒法使用Calendar類的構造方法來建立對象,API中提供了getInstance方法用來建立對象。
使用該方法得到的Calendar對象就表明當前的系統時間,因爲Calendar類toString實現的沒有Date類那麼直觀,因此直接輸出Calendar類的對象意義不大。
2、使用Calendar類表明指定的時間
Calendar c1 = Calendar.getInstance();
c1.set(2009, 3 - 1, 9);
使用Calendar類表明特定的時間,須要首先建立一個Calendar的對象,而後再設定該對象中的年月日參數來完成。
set方法的聲明爲:
public final void set(int year,int month,int date)
以上示例代碼設置的時間爲2009年3月9日,其參數的結構和Date類不同。Calendar類中年份的數值直接書寫,月份的值爲實際的月份值減1,日期的值就是實際的日期值。
若是隻設定某個字段,例如日期的值,則可使用以下set方法:
public void set(int field,int value)
在該方法中,參數field表明要設置的字段的類型,常見類型以下:
Calendar.YEAR——年份
Calendar.MONTH——月份
Calendar.DATE——日期
Calendar.DAY_OF_MONTH——日期,和上面的字段徹底相同
Calendar.HOUR——12小時制的小時數
Calendar.HOUR_OF_DAY——24小時制的小時數
Calendar.MINUTE——分鐘
Calendar.SECOND——秒
Calendar.DAY_OF_WEEK——星期幾
後續的參數value表明,設置成的值。例如:
c1.set(Calendar.DATE,10);
該代碼的做用是將c1對象表明的時間中日期設置爲10號,其它全部的數值會被從新計算,例如星期幾以及對應的相對時間數值等。
3、得到Calendar類中的信息
Calendar c2 = Calendar.getInstance();
//年份
int year = c2.get(Calendar.YEAR);
//月份
int month = c2.get(Calendar.MONTH) + 1;
//日期
int date = c2.get(Calendar.DATE);
//小時
int hour = c2.get(Calendar.HOUR_OF_DAY);
//分鐘
int minute = c2.get(Calendar.MINUTE);
//秒
int second = c2.get(Calendar.SECOND);
//星期幾
int day = c2.get(Calendar.DAY_OF_WEEK);
System.out.println("年份:" + year);
System.out.println("月份:" + month);
System.out.println("日期:" + date);
System.out.println("小時:" + hour);
System.out.println("分鐘:" + minute);
System.out.println("秒:" + second);
System.out.println("星期:" + day);
使用Calendar類中的get方法能夠得到Calendar對象中對應的信息,get方法的聲明以下:
public int get(int field)
其中參數field表明須要得到的字段的值,字段說明和上面的set方法保持一致。須要說明的是,得到的月份爲實際的月份值減1,得到的星期的值和Date類不同。在Calendar類中,週日是1,週一是2,週二是3,依次類推。
4、其它方法說明
其實Calendar類中還提供了不少其它有用的方法,下面簡單的介紹幾個常見方法的使用。
a、add方法
public abstract void add(int field,int amount)
該方法的做用是在Calendar對象中的某個字段上增長或減小必定的數值,增長是amount的值爲正,減小時amount的值爲負。
例如在計算一下當前時間100天之後的日期,代碼以下:
Calendar c3 = Calendar.getInstance();
c3.add(Calendar.DATE, 100);
int year1 = c3.get(Calendar.YEAR);
//月份
int month1 = c3.get(Calendar.MONTH) + 1;
//日期
int date1 = c3.get(Calendar.DATE);
System.out.println(year1 + "年" + month1 + "月" + date1 + "日");
這裏add方法是指在c3對象的Calendar.DATE,也就是日期字段上增長100,類內部會從新計算該日期對象中其它各字段的值,從而得到100天之後的日期,例如程序的輸出結果可能爲:
2009年6月17日
b、after方法
public boolean after(Object when)
該方法的做用是判斷當前日期對象是否在when對象的後面,若是在when對象的後面則返回true,不然返回false。例如:
Calendar c4 = Calendar.getInstance();
c4.set(2009, 10 - 1, 10);
Calendar c5 = Calendar.getInstance();
c5.set(2010, 10 - 1, 10);
boolean b = c5.after(c4);
System.out.println(b);
在該示例代碼中對象c4表明的時間是2009年10月10號,對象c5表明的時間是2010年10月10號,則對象c5表明的日期在c4表明的日期以後,因此after方法的返回值是true。
另一個相似的方法是before,該方法是判斷當前日期對象是否位於另一個日期對象以前。
c、getTime方法
public final Date getTime()
該方法的做用是將Calendar類型的對象轉換爲對應的Date類對象,二者表明相同的時間點。
相似的方法是setTime,該方法的做用是將Date對象轉換爲對應的Calendar對象,該方法的聲明以下:
public final void setTime(Date date)
轉換的示例代碼以下:
Date d = new Date();
Calendar c6 = Calendar.getInstance();
//Calendar類型的對象轉換爲Date對象
Date d1 = c6.getTime();
//Date類型的對象轉換爲Calendar對象
Calendar c7 = Calendar.getInstance();
c7.setTime(d);
5、Calendar對象和相對時間之間的互轉
Calendar c8 = Calendar.getInstance();
long t = 1252785271098L;
//將Calendar對象轉換爲相對時間
long t1 = c8.getTimeInMillis();
//將相對時間轉換爲Calendar對象
Calendar c9 = Calendar.getInstance();
c9.setTimeInMillis(t1);
在轉換時,使用Calendar類中的getTimeInMillis方法能夠將Calendar對象轉換爲相對時間。在將相對時間轉換爲Calendar對象時,首先建立一個Calendar對象,而後再使用Calendar類的setTimeInMillis方法設置時間便可。