Java的Date類與Calendar類

一:Date類

  在JDK1.0中,Date類是唯一的一個代表時間的類,但是由於Date類不便於實現國際化,所以從JDK1.1版本開始,推薦使用Calendar類進行時間和日期處理。這裏簡單介紹一下Date類的使用。

  1.使用Date類代表當前系統時間

  Date date = new Date(); System.out.println(date);

  使用Date類的默認構造方法創建出來的對象就代表當前的時間,由於Date類覆蓋了toString()方法。所以可以直接輸出Date類型的對象,顯示的結果如下:

  Sun Aug 28 10:23:06 CST 2016

  在該格式中,Sun代表Sunday(週日),Aug 代表August(八月),28代表288號,CST代表China Standard Time(中國標準時間,也就是北京時間(東八區))。

  2.使用Date類代表指定時間

  Date date = new Date(2016-1900,8-1,28); System.out.println(date);

  使用帶參的構造方法,可以構造指定日期的Date類對象,Date類中年份的參數應該是實際需要代表的年份減去1900,實際需要代表的月份減去1以後的值。顯示結果如下:

  Sun Aug 28 00:00:00 CST 2016  代表的日期就是2016年8月28號

  實際代表的年月日時分秒的日期對象和這個類似。

  3.獲取Date對象中的信息

  

 

  使用Date類中的get方法,可以獲得Date類對象的相關信息(但可以看出,Date類中的這些方法都已經過時)。需要注意的是使用getYear獲得的是Date對象中年份減去1900以後的值,所以需要顯示對應的年份則需要在返回值的基礎上加1900,月份類似。在Date類中還提供了getDay方法,用於獲得Date對象代表的時間是星期幾,Date類規定週日是0,週一是1,週二是2,後續的依次類推。

  4.Date對象和相對時間的互轉

  Date date = new Date(2016-1900,8-1,28);  long time = 1290876532190L;

  //將Date類的對象轉換爲相對時間

  long t = date.getTime(); System.out.println(t);  //結果是:1472313600000

  //將相對時間轉換爲Date類的對象

  Date da = new (time); System.out.println(da);  //結果是:Sun Aug 28 00:00:00 CST 2016 

  5.Date對象之間的比較

  Date date = new Date(2016-1900,8-1,28);

  Date date1 = new Date();

  date.compareTo(date1)返回int類型。如果等於0,則date=date1;如果小於0,則date<date1;

  使用Date對象中的getTime方法,可以將Date類的對象轉換爲相對時間,使用Date類的構造方法,可以將相對時間轉換爲Date類的對象。經過轉換以後,既方便了時間的計算,也使時間顯示比較直觀了。

  二:Calendar類

  從JDK1.1版本開始,在處理日期和時間時,系統推薦使用Calendar類進行實現(Date的一些方法都過時了)。在設計上,Calendar類的功能要比Date類強大很多,而且在實現方式上也比Date類要複雜一些,下面就介紹一下Calendar類的使用。

  Calender類是一個抽象類,在實際使用時實現特定的子類的對象,創建對象的過程對程序員來說是透明的,只需要使用getInstance()方法創建即可。

  1.使用Calendar類代表當前時間

  Calendar c = Calendar.getInstance(); System.out.println(c);  //返回的是一個Calendar對象

  由於Calendar類是抽象類,且Calendar類的構造方法是protected的,所以無法使用Calendar類的構造方法來創建對象,API中提供了getInstance方法用來創建對象。使用該方法獲得的Calendar對象就代表當前的系統時間,由於Calendar類toString實現的沒有Date類那麼直觀,所以直接輸出Calendar類的對象意義不大。

  2.使用Calendar類代表指定的時間

  Calendar c1 = Calendar.getInstance();

  c1.set(2016,8-1,28);

  使用過Calendar類代表特定的時間,需要首先創建一個Calendar的對象,然後在設定該對象中的年月日參數來完成。

  set方法的聲明爲:public final void set(int year,int month,int date)

  以上示例代碼設置的時間爲2016年8月28日,其參數的結構和Date類不一樣。Calendar類中年份的數值直接書寫,月份的值爲實際的月份值減1,日期的值就是實際的日期值。

  如果只設定某個字段某個字段,例如日期的值,則可以使用如下set方法:

  public void set(int field,int value)

  在該方法中,參數field代表要設置的字段的類型,常見類型如下:

  Calendar.YEAR---年份;Calendar.MONTH---月份; Calendar.DATE---日期; Calendar.DAY_OF_MONTH---日期,和Calendar.DATE字段完全相同;

  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類中,週日是1,週一是2,週二是3,依次類推。

  4.其他方法說明

  其實Calendar類中還提供了很多其他有用的方法,下面簡單的介紹幾個常見方法的使用。

    (1)add方法

    public abstract void add(int field,int amount)

    該方法的作用是在Calendar對象中的某個字段上增加或減少一定的數值,增加是amount的值爲正,減少是amount的值爲負。

    例如計算當前時間100天以後的日期,代碼如下:

    Calendar c3 = Calendar.getInstance();

    c3.add(Calendar.DATE,100);

    int year = c3.get(Calendar.YEAR); 

    int month = c3.get(Calendar.MONTH);

    int date  = c3.get(Calendar.DATE);

    System.out.println(year+"年"+month+"月"+date+"日");   

    這裏add方法是指在c3對象的Calendar.DATE,也就是日期字段上增加100,類內部會重新計算該日期對象中其它各字段的值,從而獲得100天以後的   日期,例如程序的輸出結果可能爲:2016年11月6日

    (2)after方法

    public boolean after(Object when)

    該方法的作用是判斷當前日期對象是否在when對象的後面,如果在when對象的後面則返回true,否則返回false。例如:

    Calebdar c4 = Calendar.getInstance(); c4.set(2016,8-1,28);

    Calendar c5 = Calendar.getInstance();c5.set(2016,10-1,1);

    boolean b = c5.after(c4);

    System.out.println(b);   

    在該示例代碼中對象c4代表的時間是2016年8月28號,對象c5代表的時間是2016年10月1號,則對象c5代表的日期在c4代表的日期之後,所以after   方法的返回值是true。

    另外一個類似的方法是before,該方法是判斷當前日期對象是否位於另外一個日期對象之前。

  5.Calendar對象和相對時間之間的轉換

  Calendar c6 = Calendar.getInstance();  long t = 1252785271098L;

  //將Calendar對象轉換爲相對時間

  long t1 = c6.getTimeInMillis();

  //將相對時間轉換成Calendar對象

  Calendar c9 = Calendar.getInstance();

  c9.setTimeInMillis(t1);

  在轉換時,使用Calendar類中的getTimeInMillis方法可以將Calendar對象轉換爲相對時間。在將相對時間轉換爲Calendar對象時,首先創建一個Calendar對象,然後再使用Calendar類的setTimeInMillis方法設置時間即可。

  5.應用實例

  5.1計算兩個日期之間相差的天數

  例如計算2016年8月20號和2016年8月29號之間相差的天數。該程序實現的原理爲:首先代表兩個特定的時間點,這裏使用Calendar的對象進行代表,然後將兩個時間點轉換爲對應的相對時間,求兩個時間點相對時間的差值,然後除以一天的毫秒數(24小時*60分鐘*60秒*1000毫秒)即可獲得對應的天數。實現該示例的完整代碼如下:

  

  5.2輸出當月的日曆

  該示例的功能是輸出當前系統時間所在月的日曆,例如當前系統時間是2016年8月29日,則輸出2016年8月的日曆。

  該程序實現的原理爲:首先獲得該月1號是星期幾,然後獲得該月的天數,最後使用流程控制實現按照日曆的格式進行輸出即可。即如果1號是星期一,則打印一個單位的空格,如果1號是星期二,則打印兩個單位的空格,依次類推。打印完星期六的日期以後,進行換行。實現該示例的完整代碼如下:

  

   關於時間和日期的處理就介紹這麼多,更多的實現方法還需要根據具體問題進行對應的實現。

發佈了31 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章