我的家園

          我的家園

          Java Date 和 Calendar

          Posted on 2012-04-15 16:37 zljpp 閱讀(118) 評論(0)  編輯  收藏

          Java 語言的Date(日期),Calendar(日歷),DateFormat(日期格式)組成了Java標(biāo)準(zhǔn)的一個基本但是非常重要的部分。日期是商業(yè)邏輯計算一個關(guān)鍵的部分,所有的開發(fā)者都應(yīng)該能夠計算未來的日期,定制日期的顯示格式,并將文本數(shù)據(jù)解析成日期對象。 

          創(chuàng)建一個日期對象 

          讓我們看一個使用系統(tǒng)的當(dāng)前日期和時間創(chuàng)建一個日期對象并返回一個長整數(shù),這個時間通常被稱為Java 虛擬機(JVM)主機環(huán)境的系統(tǒng)時間。

          星期五,2012年3月2日,下午大約是22:38:41的樣子,上面的例子在系統(tǒng)輸出設(shè)備上顯示的結(jié)果是 1330699121772。值得注意的是我們使用了Date 構(gòu)造函數(shù)創(chuàng)建一個日期對象,這個構(gòu)造函數(shù)沒有接受任何參數(shù),而這個構(gòu)造函數(shù)在內(nèi)部使用了System.currentTimeMillis() 方法來從系統(tǒng)獲取日期。現(xiàn)在我們已經(jīng)知道了如何獲取從1970年1月1日開始經(jīng)歷的毫秒數(shù)了。我們?nèi)绾尾拍芤砸环N用戶明白的格式來顯示這個日期呢? 在這里類java.text.SimpleDateFormat 和它的抽象基類 java.text.DateFormat 就派得上用場了。 

          日期數(shù)據(jù)的定制格式 

          假如我們希望定制日期數(shù)據(jù)的格式,比方星期五-3月-02日-2012年. 下面的例子展示了如何完成這個工作: 

          只要通過向SimpleDateFormat 的構(gòu)造函數(shù)傳遞格式字符串"EEE-MMMM-dd-yyyy",我們就能夠指明自己想要的格式。格式字符串中的ASCII 字符告訴格式化函數(shù)下面顯示日期數(shù)據(jù)的哪一個部分。EEEE是星期,MMMM是月,dd是日,yyyy是年,字符的個數(shù)決定了日期是如何格式化的。傳遞"EE-MM-dd-yy"會顯示 Friday-March-02-2012。 

          將文本數(shù)據(jù)解析成日期對象 

          假設(shè)我們有一個文本字符串包含了一個格式化了的日期對象,我們希望解析這個字符串并從文本日期數(shù)據(jù)創(chuàng)建一個日期對象。我們將再次以格式化字符串"MM-dd-yyyy" 調(diào)用SimpleDateFormat類。但是這一次,我們使用格式化解析而不是生成一個文本日期數(shù)據(jù)。我們的例子顯示在下面,將解析文本字符串"3-02-2012"并創(chuàng)建一個值為1330617600000 的日期對象。


          使用標(biāo)準(zhǔn)的日期格式化過程 

          既然我們已經(jīng)可以生成和解析定制的日期格式了,讓我們來看一看如何使用內(nèi)建的格式化過程。方法 DateFormat.getDateTimeInstance() 讓我們得以用幾種不同的方法獲得標(biāo)準(zhǔn)的日期格式化過程。下面是我們獲取了六個內(nèi)建的日期格式化過程。它們包括一個空,默認(rèn),短的,中等的,長的,完整的日期格式。 

          運行結(jié)果: 
          Fri Mar 02 23:06:36 CST 2012
          Mar 2, 2012
          Mar 2, 2012 11:06:36 PM
          3/2/12 11:06 PM
          Mar 2, 2012 11:06:36 PM
          March 2, 2012 11:06:36 PM CST
          Friday, March 2, 2012 11:06:36 PM CST
          Mar 2, 2012
          3/2/12
          Mar 2, 2012
          March 2, 2012
          Friday, March 2, 2012

          注意我們在對 getDateTimeInstance的每次調(diào)用中都傳遞了兩個值:第一個參數(shù)是日期風(fēng)格,而第二個參數(shù)是時間風(fēng)格。它們都是基本數(shù)據(jù)類型int(整型)。考慮到可讀性,我們使用了DateFormat 類提供的常量: DEFAULT,SHORT,MEDIUM,LONG, FULL。 


          Calendar 類 

          我們現(xiàn)在已經(jīng)能夠格式化并創(chuàng)建一個日期對象了,但是我們?nèi)绾尾拍茉O(shè)置和獲取日期數(shù)據(jù)的特定部分呢,比如說小時,日,分鐘? 我們又如何在日期的這些部分加上或者減去值呢? 答案是使用Calendar 類。 

          假設(shè)你想要設(shè)置,獲取,操縱一個日期對象的各個部分,比方一個月的一天或者是一個星期的一天,為了演示這個過程,我們將使用具體的子類 java.util.GregorianCalendar。 考慮下面的例子,它計算得到下面的第十個星期五是13號。 

          運行結(jié)果:

          System Date: Fri Mar 02 23:37:01 CST 2012
          Day of Week to Friday: 
          Friday, March 2, 2012
          Friday, April 13, 2012
          Friday, July 13, 2012
          Friday, September 13, 2013
          Friday, December 13, 2013
          Friday, June 13, 2014
          Friday, February 13, 2015
          Friday, March 13, 2015
          Friday, November 13, 2015
          Friday, May 13, 2016
          Friday, January 13, 2017
          Friday, October 13, 2017


          在這個例子中我們作了有趣的函數(shù)調(diào)用:

            calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY) 和 calendar.add(GregorianCalendar.DAY_OF_MONTH, 7)

          set 方法能夠讓我們通過簡單的設(shè)置星期中的哪一天這個域來將我們的時間調(diào)整為星期五。注意到這里我們使用了常量 DAY_OF_WEEK 和 FRIDAY來增強代碼的可讀性。

          add 方法讓我們能夠在日期上加上數(shù)值,潤年的所有復(fù)雜的計算都由這個方法自動處理。 

          我們這個例子的輸出結(jié)果是: 
          System Date: Fri Mar 02 23:33:19 CST 2012

          當(dāng)我們將它設(shè)置成星期五以后就成了:

          Day of Week to Friday: 
          Friday, March 2, 2012
          Friday, April 13, 2012
          Friday, July 13, 2012
          Friday, September 13, 2013
          Friday, December 13, 2013
          Friday, June 13, 2014
          Friday, February 13, 2015
          Friday, March 13, 2015
          Friday, November 13, 2015
          Friday, May 13, 2016
          Friday, January 13, 2017
          Friday, October 13, 2017

          時間掌握在你的手里 

          有了這些Date 和Calendar 類的例子,你應(yīng)該能夠使用 java.util.Date,java.text.SimpleDateFormat, java.util.GregorianCalendar 創(chuàng)建許多方法了。


          測試代碼下載


          參考推薦:

          Java語言的Calendar和Date類

          Java 之 Date 和 Calendar 實例

          JAVA Calendar詳解

          Date類型的轉(zhuǎn)換和運算

          “Java語言的Calendar和Date類” 的更多相關(guān)文章




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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 牙克石市| 古丈县| 大石桥市| 沿河| 武汉市| 奇台县| 滕州市| 华池县| 张家界市| 即墨市| 阿坝县| 西吉县| 定西市| 碌曲县| 无为县| 桦南县| 锡林郭勒盟| 六盘水市| 纳雍县| 嘉鱼县| 招远市| 江陵县| 德兴市| 稷山县| 哈密市| 泰来县| 昌黎县| 文山县| 会昌县| 和政县| 瑞金市| 永昌县| 铁岭县| 理塘县| 沁源县| 连南| 孙吴县| 洪雅县| 安平县| 青河县| 恩平市|