<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java學習

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

     

    時間和日期處理

    9.6 java.util

             java.util包是Java語言提供的工具類包,該包中包含了如日期、隨機數和數據結構實現類等一系列的工具類實現,是學習Java語言的基礎包之一。

             本部分就以Java語言中常用的時間和日期處理、隨機數處理以及集合框架為基礎進行介紹。

    9.6.1 時間和日期處理

             使用程序進行時間和日期處理,是程序員必須的一種常用技能,在不同的程序設計語言中提供了不同的格式進行實現,現在就介紹一下Java語言中的實現方式,以及基本的應用,使得對于Java語言的時間和日期處理技術有比較全面的認識。

             在程序中,某個固定的時間代表的都是一個時間點,也就是一個時間的瞬間,例如20093815500秒,在實際的應用中,經常需要對于兩個時間進行比較或計算時間之間的差值,這些功能在Java語言中都可以很方便的實現。

             Java語言中,時間的表達單位是毫秒。也就是說,Java語言中的時間處理可以精確到毫秒。

             Java語言中,表達時間的方式有兩種:

    a、絕對時間。以直觀的形式來表達某個時間點,例如20091010000秒。使用這種形式表達時間,使用起來比較直觀,但是不方便進行時間之間的計算。例如無法很直觀的計算202011000秒和上面這個時間之間相差多少天。絕對時間以對象的形式進行表達,Java API中提供了java.util包中的Date類和Calendar類的對象進行表達。

    b、相對時間。以一個long型的數字表達某個時間點。例如102847423468。使用這種方式的優缺點和絕對時間剛好相反。這種方式很方便時間之間的計算,但是閱讀起來很不直觀。在Java API中以需要表達的時間點,例如20091010000秒,和GMT(格林威治時間,也就是倫敦時間)197011000秒之間相差的毫秒數作為相對時間的數值,如果該時間在這個時間只好,則相對時間為正數,否則相對時間為負數。Java API中提供了java.lang包中的System類的currentTimeMillis方法,獲得以相對時間形式描述的當前系統時間。

    在實際使用時,絕對時間和相對時間之間可以很方便的進行轉換。

    9.6.1.1 Date

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

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

                       Date d = new Date();

                       System.out.println(d);

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

                                Sun Mar 08 16:35:58 CST 2009

    在該格式中,Sun代表Sunday(周日)Mar代表March(三月)08代表8號,CST代表China Standard Time(中國標準時間,也就是北京時間(東八區))

             2、使用Date類代表指定的時間

                                Date d1 = new Date(2009-1900,3-1,9);

                                System.out.println(d1);

    使用帶參數的構造方法,可以構造指定日期的Date類對象,Date類中年份的參數應該是實際需要代表的年份減去1900,實際需要代表的月份減去1以后的值。例如上面的示例代碼代表就是200939號。

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

             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,后續的依次類推。

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

                      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類的對象。經過轉換以后,既方便了時間的計算,也使時間顯示比較直觀了。

    9.6.1.2 Calendar

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

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

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

                       Calendar c = Calendar.getInstance();

    由于Calendar類是抽象類,且Calendar類的構造方法是protected的,所以無法使用Calendar類的構造方法來創建對象,API中提供了getInstance方法用來創建對象。

    使用該方法獲得的Calendar對象就代表當前的系統時間,由于CalendartoString實現的沒有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)

    以上示例代碼設置的時間為200939日,其參數的結構和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類中還提供了很多其它有用的方法,下面簡單的介紹幾個常見方法的使用。

    aadd方法

                       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天以后的日期,例如程序的輸出結果可能為:

                       2009617

    bafter方法

                       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代表的時間是20091010號,對象c5代表的時間是20101010號,則對象c5代表的日期在c4代表的日期之后,所以after方法的返回值是true

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

                       cgetTime方法

                                         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);

             5Calendar對象和相對時間之間的互轉

                                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方法設置時間即可。

    9.6.1.3 應用示例

             下面以兩個簡單的示例介紹時間和日期處理的基本使用。

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

    例如計算201041號和2009311號之間相差的天數,則可以使用時間和日期處理進行計算。

    該程序實現的原理為:首先代表兩個特定的時間點,這里使用Calendar的對象進行代表,然后將兩個時間點轉換為對應的相對時間,求兩個時間點相對時間的差值,然后除以1天的毫秒數(24小時X60分鐘X60X1000毫秒)即可獲得對應的天數。實現該示例的完整代碼如下:

             import java.util.*;

    /**

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

     */

    public class DateExample1 {

             public static void main(String[] args) {

                       //設置兩個日期

                       //日期:2009311

                       Calendar c1 = Calendar.getInstance();

                       c1.set(2009, 3 - 1, 11);

                       //日期:201041

                       Calendar c2 = Calendar.getInstance();

                       c2.set(2010, 4 - 1, 1);

                       //轉換為相對時間

                       long t1 = c1.getTimeInMillis();

                       long t2 = c2.getTimeInMillis();

                       //計算天數

                       long days = (t2 - t1)/(24 * 60 * 60 * 1000);

                       System.out.println(days);

             }

    }

             2、輸出當前月的月歷

    該示例的功能是輸出當前系統時間所在月的日歷,例如當前系統時間是2009310日,則輸出20093月的日歷。

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

             import java.util.*;

    /**

     * 輸出當前月的日歷

     */

    public class DateExample2{

             public static void main(String[] args){

                       //獲得當前時間

                       Calendar c = Calendar.getInstance();

                       //設置代表的日期為1

                       c.set(Calendar.DATE,1);

                       //獲得1號是星期幾

                       int start = c.get(Calendar.DAY_OF_WEEK);

                       //獲得當前月的最大日期數

                       int maxDay = c.getActualMaximum(Calendar.DATE);   

                      

                       //輸出標題

                       System.out.println("星期日星期一星期二星期三 星期四 星期五   星期六");

                       //輸出開始的空格

                       for(int i = 1;i < start;i++){

                                System.out.print("      "); 

                       }

                       //輸出該月中的所有日期

                       for(int i = 1;i <= maxDay;i++){

                                //輸出日期數字

                                System.out.print(" " + i);

                                //輸出分隔空格

                                System.out.print("     ");

                                if(i < 10){

                                         System.out.print(' ');

                                }

                                //判斷是否換行

                                if((start + i - 1) % 7 == 0){

                                         System.out.println();       

                                }

                       }

                       //換行

                       System.out.println();       

             }       

    }

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

    posted on 2009-06-15 13:45 找個美女做老婆 閱讀(861) 評論(1)  編輯  收藏

    評論

    # re: 時間和日期處理 2009-06-15 13:47 找個美女做老婆

    Java樂園 -Java學習者的天堂。 http://www.javaly.cn Java學習交流網站 Java樂園群號:15651281  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    公告

    本blog已經搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 春意影院午夜爽爽爽免费| 美女黄色免费网站| 免费一级毛片无毒不卡| 国产亚洲精品看片在线观看| 亚洲av成人一区二区三区在线播放| 91精品视频免费| 亚洲一区精品视频在线| 成人免费观看一区二区| 亚洲avav天堂av在线网爱情| 真人做A免费观看| 亚洲熟伦熟女专区hd高清| 四虎成人免费观看在线网址 | 亚洲精品岛国片在线观看| 色www免费视频| 国产精品亚洲不卡一区二区三区| jyzzjyzz国产免费观看| 黑人大战亚洲人精品一区 | 免费国产黄网站在线看| 最新亚洲成av人免费看| 免费无码又爽又刺激一高潮| 亚洲天堂中文字幕| 免费观看成人毛片a片2008| 精品亚洲国产成人av| 精品国产香蕉伊思人在线在线亚洲一区二区 | 亚洲а∨精品天堂在线| 亚洲 综合 国产 欧洲 丝袜| eeuss免费影院| 久久亚洲美女精品国产精品| 毛片大全免费观看| 国产亚洲日韩在线a不卡| 国产午夜亚洲精品理论片不卡 | 亚洲国产精品高清久久久| 免费黄网站在线看| 亚洲国产视频久久| 久久激情亚洲精品无码?V| 一级毛片免费观看不卡的| 亚洲人配人种jizz| 亚洲视频在线一区二区| 精品免费久久久久久久| 免费亚洲视频在线观看| 亚洲国产一区二区三区青草影视|