Calendar使用方法_第1頁
Calendar使用方法_第2頁
Calendar使用方法_第3頁
Calendar使用方法_第4頁
Calendar使用方法_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Calendar使用方法 Java 語言的Calendar,GregorianCalendar (日歷),Date(日期), 和DateFormat(日期格式)組成了Java標準的一個基本但是非常重要的部分. 日期是商業(yè)邏輯計算一個關(guān)鍵的部分. 所有的開發(fā)者都應(yīng)該能夠計算未來的日期, 定制日期的顯示格式, 并將文本數(shù)據(jù)解析成日期對象。學習日期, 日期格式, 日期的解析和日期的計算。 我們將討論下面的類: 1、  具體類(和抽象類相對)java.util.Date 2、  抽象類java.text.DateFormat 和它的一個具體子類,java.text.Sim

2、pleDateFormat 3、  抽象類java.util.Calendar 和它的一個具體子類,java.util.GregorianCalendar 具體類可以被實例化, 但是抽象類卻不能. 你首先必須實現(xiàn)抽象類的一個具體子類.1.   java.util.Date及其格式化Date 類從Java 開發(fā)包(JDK) 1.0 就開始進化, 當時它只包含了幾個取得或者設(shè)置一個日期數(shù)據(jù)的各個部分的方法, 比如說月, 日, 和年. 這些方法現(xiàn)在遭到了批評并且已經(jīng)被轉(zhuǎn)移到了Calendar類里去了, 我們將在本文中進一步討論它. 這種改進旨在更好的處理日期數(shù)據(jù)的國際化

3、格式. 就象在JDK 1.1中一樣, Date 類實際上只是一個包裹類, 它包含的是一個長整型數(shù)據(jù), 表示的是從GMT(格林尼治標準時間)1970年, 1 月 1日00:00:00這一刻之前或者是之后經(jīng)歷的毫秒數(shù). 1.1. 創(chuàng)建java.util.DateJava統(tǒng)計從 1970年1月1日起的毫秒的數(shù)量表示日期。也就是說,例如,1970年1月2日,是在1月1日后的86,400,000毫秒。同樣的,1969年12月 31日是在1970年1月1日前86,400,000毫秒。Java的Date類使用long類型紀錄這些毫秒值.因為long是有符號整數(shù),所以日期可以在1970年1月1日之前,也可以在

4、這之后。Long類型表示的最大正值和最大負值可以輕松的表示290,000,000年的時間,這適合大多數(shù)人的時間要求。讓我們看一個使用系統(tǒng)的當前日期和時間創(chuàng)建一個日期對象并返回一個長整數(shù)的簡單例子. 這個時間通常被稱為Java 虛擬機(JVM)主機環(huán)境的系統(tǒng)時間. import java.util.Date; public class DateExample1 public static void main(String args) / Get the system date/time Date date = new Date(); / 打印出具體的年,月,日,小時,分鐘,秒鐘以及時區(qū)Syste

5、m.out.println(date.getTime();    在星期六, 2001年9月29日, 下午大約是6:50的樣子, 上面的例子在系統(tǒng)輸出設(shè)備上顯示的結(jié)果是 1001803809710. 在這個例子中,值得注意的是我們使用了Date 構(gòu)造函數(shù)創(chuàng)建一個日期對象, 這個構(gòu)造函數(shù)沒有接受任何參數(shù). 而這個構(gòu)造函數(shù)在內(nèi)部使用了System.currentTimeMillis() 方法來從系統(tǒng)獲取日期. /1年前日期   java.util.Date myDate=new java.util.Date();     lon

6、g myTime=(myDate.getTime()/1000)-60*60*24*365;   myDate.setTime(myTime*1000);   String mDate=formatter.format(myDate);/明天日期   myDate=new java.util.Date();    myTime=(myDate.getTime()/1000)+60*60*24;   myDate.setTime(myTime*1000);   mDate=fo

7、rmatter.format(myDate);/兩個時間之間的天數(shù)   SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");   java.util.Date date= myFormatter.parse("2003-05-1");    java.util.Date mydate= myFormatter.parse("1899-12-30");   long 

8、day=(date.getTime()-mydate.getTime()/(24*60*60*1000);/加半小時SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");java.util.Date date1 = format.parse("2002-02-28 23:16:00");long Time=(date1.getTime()/1000)+60*30;date1.setTime(Time*1000);String mydate1=formatter.form

9、at(date1);/年月周求日期SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");java.util.Date date2= formatter2.parse("2003-05 5 星期五"); SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");String mydate2=formatter3.format(date2);/求是星期幾mydate= myFormatter

10、.parse("2001-1-1");SimpleDateFormat formatter4 = new SimpleDateFormat("E");String mydate3=formatter4.format(mydate);   1.2. Date格式化能以一種用戶明白的格式來顯示這個日期呢? 在這里類java.text.SimpleDateFormat 和它的抽象基類 java.text.DateFormat。那么, 現(xiàn)在我們已經(jīng)知道了如何獲取從1970年1月1日開始經(jīng)歷的毫秒數(shù)了. 我們?nèi)绾尾舊ormat 就派得

11、上用場了. / 我們能不能用下面的代碼構(gòu)件出 2001/8/8 8:8    import java.io.*;    import java.util.*;     public class WhatIsDate            public static void main(String args)        &#

12、160;    Date date = new Date(2001, 8, 8, 8, 8, 8);            System.out.println(date);             Java 的編譯器竟然報如下信息 (Sun JDK1.3, Windows 2000 中文下)注意:WhatIsDate.java 使用或覆蓋一個不鼓

13、勵使用的API。注意:使用-deprecation重新編譯,以得到詳細信息。! 那么 Date 對象究竟是為了滿足哪個需求呢?看來它不是用來實現(xiàn)基于年/月/日小時:分鐘 的時間表述。我們查看 Java 的文檔,我們看到有 getTime() 方法,它返回的竟然是一個 long 值。文檔進一步又告訴我們這個值代表了當前系統(tǒng)的時間離1970/1/1 0:0 的毫秒差,而且是在 GMT 時區(qū)下(也被稱為 EPOC)。如果我們指定的時間是在此之前的,那它將返回一個負數(shù)值。這個發(fā)現(xiàn)讓我們對 Date 對象有了一個全新的認識-Date 存放的是與 EPOC 的偏差值。換而言之我們也可通過 lon

14、g 類型來表示時間?對了,這個猜想是得到了 Java 的支持:   / 第二種獲得當前時間的方法    long dateInMilliSeconds = System.currentTimeMillis();    / 這時候打印出的只是一串數(shù)字而已    System.out.println(dateInMilliSeconds); 對程序執(zhí)行效率敏感的程序員可以發(fā)現(xiàn)這個方法只是生成一個 Java 的原始類型 (primitive type) long, 不需要實例化一個

15、對象。因此如果我們對時間的處理只是在內(nèi)部進行時,可以用 long 來代替 Date 對象。最典型的應(yīng)用就是在一段代碼開始和結(jié)束時,分別獲得系統(tǒng)當前的時間,然后計算出代碼執(zhí)行所需的時間(微秒級)。   long start = System.currentTimeMillis();    / 代碼段    System.out.println("需要 "+(System.currentTimeMillis()-start)+" 微秒"); 那么當我們要把這個 long

16、 值已更為友好的表現(xiàn)形式顯示處理的時候,我們可以用它來構(gòu)造 Date 對象:Date date = new Date(dateInMilliSeconds);System.out.println(date); 我們看到了在 Java 中對時間最為基本的表示,有通過對EPOC 的偏差值進行處理。Date 對象是對它的一個對象的封裝。我們同時也看到了,在現(xiàn)時世界中我們對時間的描述通常是通過"某年某月某日某時某分"來定義的。Date 的顯示(實際上是 toString() 方法)描述了這些信息,但 Java 并不建議我們用這種方式直接來構(gòu)件 Date 對象。因此我們需要

17、找出哪個對象可以實現(xiàn)這個需求。這就是我們下面就要講述的 Calendar 對象的功能。在我們進一步研究 Calendar 之前,請記住 Date 只是一個對 long 值(基于 GMT 時區(qū))的對象封裝。它所表現(xiàn)出來的年/月/日小時:分鐘時區(qū)的時間表述,只是它的 toString() 方法所提供的。千萬不要為這個假象所迷惑。假如我們希望定制日期數(shù)據(jù)的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成這個工作: import java.text.SimpleDateFormat; import java.util.Date; public class DateExample

18、2 public static void main(String args) SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy"); Date date = new Date(); System.out.println(bartDateFormat.format(date);  只要通過向SimpleDateFormat 的構(gòu)造函數(shù)傳遞格式字符串"EEE-MMMM-dd-yyyy", 我們就能夠指明自己想要的格式. 你應(yīng)該可以看見, 格式字符串中的

19、ASCII 字符告訴格式化函數(shù)下面顯示日期數(shù)據(jù)的哪一個部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的個數(shù)決定了日期是如何格式化的.傳遞"EE-MM-dd-yy"會顯示 Sat-09-29-01. 請察看Sun 公司的Web 站點獲取日期格式化選項的完整的指示. 1.3. 文本數(shù)據(jù)解析成日期對象 假設(shè)我們有一個文本字符串包含了一個格式化了的日期對象, 而我們希望解析這個字符串并從文本日期數(shù)據(jù)創(chuàng)建一個日期對象. 我們將再次以格式化字符串"MM-dd-yyyy" 調(diào)用SimpleDateFormat類, 但是這一次, 我們使用格式

20、化解析而不是生成一個文本日期數(shù)據(jù). 我們的例子, 顯示在下面, 將解析文本字符串"9-29-2001"并創(chuàng)建一個值為001736000000 的日期對象. 通過parse()方法,DateFormat能夠以一個字符串創(chuàng)立一個Date對象。這個方法能拋出ParseException異常,所以你必須使用適當?shù)漠惓L幚砑夹g(shù)。例子程序: import java.text.SimpleDateFormat; import java.util.Date; public class DateExample3 public static void main(String args) / C

21、reate a date formatter that can parse dates of / the form MM-dd-yyyy. SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy"); / Create a string containing a text date to be parsed. String dateStringToParse = "9-29-2001" try / Parse the text version of the date. / We

22、 have to perform the parse method in a / try-catch construct in case dateStringToParse / does not contain a date in the format we are expecting. Date date = bartDateFormat.parse(dateStringToParse); / Now send the parsed date as a long value / to the system output. System.out.println(date.getTime();

23、catch (Exception ex) System.out.println(ex.getMessage();  1.4. 使用標準的日期格式化過程 既然我們已經(jīng)可以生成和解析定制的日期格式了, 讓我們來看一看如何使用內(nèi)建的格式化過程. 方法 DateFormat.getDateTimeInstance() 讓我們得以用幾種不同的方法獲得標準的日期格式化過程. 在下面的例子中, 我們獲取了四個內(nèi)建的日期格式化過程. 它們包括一個短的, 中等的, 長的, 和完整的日期格式. import java.text.DateFormat; import java.util.Date; pub

24、lic class DateExample4 public static void main(String args) Date date = new Date(); DateFormat shortDateFormat = DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.SHORT); DateFormat mediumDateFormat = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM); DateFormat longDa

25、teFormat = DateFormat.getDateTimeInstance( DateFormat.LONG, DateFormat.LONG); DateFormat fullDateFormat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL); System.out.println(shortDateFormat.format(date); System.out.println(mediumDateFormat.format(date); System.out.println(longDateF

26、ormat.format(date); System.out.println(fullDateFormat.format(date); 注意我們在對 getDateTimeInstance的每次調(diào)用中都傳遞了兩個值. 第一個參數(shù)是日期風格, 而第二個參數(shù)是時間風格. 它們都是基本數(shù)據(jù)類型int(整型). 考慮到可讀性, 我們使用了DateFormat 類提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道獲取時間和日期格式化過程的更多的方法和選項, 請看Sun 公司W(wǎng)eb 站點上的解釋. 運行我們的例子程序的時候, 它將向標準輸出設(shè)備輸出下面的內(nèi)容: 9/29/01

27、8:44 PM Sep 29, 2001 8:44:45 PM September 29, 2001 8:44:45 PM EDT Saturday, September 29, 2001 8:44:45 PM EDT 2.   Calendar 日歷類 首先請記住 Calendar 只是一個抽象類, 也就是說你無法直接獲得它的一個實例,換而言之你可以提供一個自己開發(fā)的 Calendar 對象。那究竟什么是一個 Calendar 呢?中文的翻譯就是日歷,那我們立刻可以想到我們生活中有陽(公)歷、陰(農(nóng))歷之分。它們的區(qū)別在哪呢?比如有:月份的定義 - 陽(公)歷 一年12

28、個月,每個月的天數(shù)各不同;陰(農(nóng))歷,每個月固定28天,每周的第一天 - 陽(公)歷星期日是第一天;陰(農(nóng))歷,星期一是第一天實際上,在歷史上有著許多種紀元的方法。它們的差異實在太大了,比如說一個人的生日是"八月八日" 那么一種可能是陽(公)歷的八月八日,但也可以是陰(農(nóng))歷的日期。所以為了計時的統(tǒng)一,必需指定一個日歷的選擇。那現(xiàn)在最為普及和通用的日歷就是 "Gregorian Calendar"。也就是我們在講述年份時常用 "公元幾幾年"。Calendar 抽象類定義了足夠的方法,讓我們能夠表述日歷的規(guī)則。Java 本身提供了對 &

29、quot;Gregorian Calendar" 規(guī)則的實現(xiàn)。我們從 Calendar.getInstance() 中所獲得的實例就是一個 "GreogrianCalendar" 對象(與您通過 new GregorianCalendar() 獲得的結(jié)果一致)。下面的代碼可以證明這一點:   import java.io.*;    import java.util.*;     public class WhatIsCalendar    &#

30、160;       public static void main(String args)             Calendar calendar = Calendar.getInstance();            if (calendar instanceof GregorianCalendar)

31、60;               System.out.println("It is an instance of GregorianCalendar");              Calendar 在 Java 中是一個抽象類(Abstract Class),GregorianCalendar 是它的一個具體實現(xiàn)

32、。Calendar 與 Date 的轉(zhuǎn)換非常簡單:   Calendar calendar = Calendar.getInstance();    / 從一個 Calendar 對象中獲取 Date 對象    Date date = calendar.getTime();    / 將 Date 對象反應(yīng)到一個 Calendar 對象中,    / Calendar/GregorianCalendar 沒有構(gòu)造函數(shù)可以接受 Date 對象 &

33、#160;  / 所以我們必需先獲得一個實例,然后設(shè)置 Date 對象    calendar.setTime(date);   Calendar 對象在使用時,有一些值得注意的事項:1. Calendar 的 set() 方法set(int field, int value) - 是用來設(shè)置"年/月/日/小時/分鐘/秒/微秒"等值field 的定義在 Calendar 中set(int year, int month, int day, int hour, int minute, int second)

34、 但沒有set(int year, int month, int day, int hour, int minute, int second, int millisecond) 前面 set(int,int,int,int,int,int) 方法不會自動將 MilliSecond 清為 0。另外,月份的起始值為而不是,所以要設(shè)置八月時,我們用而不是8。calendar.set(Calendar.MONTH, 7);我們通常需要在程序邏輯中將它清為 0,否則可能會出現(xiàn)下面的情況:   import java.io.*;    import jav

35、a.util.*;     public class WhatIsCalendarWrite            public static void main(String args) throws Exception            ObjectOutputStream out =    

36、0;           new ObjectOutputStream(                    new FileOutputStream("calendar.out");        

37、0;   Calendar cal1 = Calendar.getInstance();            cal1.set(2000, 7, 1, 0, 0, 0);            out.writeObject(cal1);          

38、  Calendar cal2 = Calendar.getInstance();            cal2.set(2000, 7, 1, 0, 0, 0);            cal2.set(Calendar.MILLISECOND, 0);         &#

39、160;  out.writeObject(cal2);            out.close();             我們將 Calendar 保存到文件中   import java.io.*;    import java.util.*;     public c

40、lass WhatIsCalendarRead            public static void main(String args) throws Exception            ObjectInputStream in =            &

41、#160;   new ObjectInputStream(                    new FileInputStream("calendar.out");            Calendar cal2 = (Calendar)in.rea

42、dObject();            Calendar cal1 = Calendar.getInstance();            cal1.set(2000, 7, 1, 0, 0, 0);            if (cal1.equals(cal2

43、)                System.out.println("Equals");            else                System.

44、out.println("NotEqual");            System.out.println("Old calendar "+cal2.getTime().getTime();            System.out.println("New calendar "+cal1.getTime().ge

45、tTime();            cal1.set(Calendar.MILLISECOND, 0);            cal2 = (Calendar)in.readObject();            if (cal1.equals(cal2)

46、60;               System.out.println("Equals");            else                System.out.

47、println("NotEqual");            System.out.println("Processed Old calendar "+cal2.getTime().getTime();            System.out.println("Processed New calendar "+c

48、al1.getTime().getTime();             然后再另外一個程序中取回來(模擬對數(shù)據(jù)庫的存儲),但是執(zhí)行的結(jié)果是:NotEqualOld calendar 965113200422 <- 最后三位的MilliSecond與當前時間有關(guān)New calendar 965113200059 <-/EqualsProcessed Old calendar 965113200000Processed New calendar 965113200000

49、60; 另外我們要注意的一點是,Calendar 為了性能原因?qū)?set() 方法采取延緩計算的方法。在 JavaDoc 中有下面的例子來說明這個問題:Calendar cal1 = Calendar.getInstance();    cal1.set(2000, 7, 31, 0, 0 , 0); /2000-8-31    cal1.set(Calendar.MONTH, Calendar.SEPTEMBER); /應(yīng)該是 2000-9-31,也就是 2000-10-1    cal1.s

50、et(Calendar.DAY_OF_MONTH, 30); /如果 Calendar 轉(zhuǎn)化到 2000-10-1,那么現(xiàn)在的結(jié)果就該是 2000-10-30    System.out.println(cal1.getTime(); /輸出的是2000-9-30,說明 Calendar 不是馬上就刷新其內(nèi)部的記錄 在 Calendar 的方法中,get() 和 add() 會讓 Calendar 立刻刷新。Set() 的這個特性會給我們的開發(fā)帶來一些意想不到的結(jié)果。我們后面會看到這個問題。2. Calendar 對象的容錯性,Lenient 設(shè)置我們知

51、道特定的月份有不同的日期,當一個用戶給出錯誤的日期時,Calendar 如何處理的呢?   import java.io.*;    import java.util.*;     public class WhatIsCalendar            public static void main(String args) throws Exception   

52、0;        Calendar cal1 = Calendar.getInstance();            cal1.set(2000, 1, 32, 0, 0, 0);            System.out.println(cal1.getTime();   

53、;         cal1.setLenient(false);            cal1.set(2000, 1, 32, 0, 0, 0);            System.out.println(cal1.getTime();    

54、0;        它的執(zhí)行結(jié)果是:   Tue Feb 01 00:00:00 PST 2000    Exception in thread "main" java.lang.IllegalArgumentException        at java.util.GregorianCputeTime(GregorianCalendar.java:1368)   

55、     at java.util.Calendar.updateTime(Calendar.java:1508)        at java.util.Calendar.getTimeInMillis(Calendar.java:890)        at java.util.Calendar.getTime(Calendar.java:871)     

56、60;  at WhatIsCalendar.main(WhatIsCalendar.java:12) 當我們設(shè)置該 Calendar 為 Lenient false 時,它會依據(jù)特定的月份檢查出錯誤的賦值。3. 不穩(wěn)定的 Calendar我們知道 Calendar 是可以被 serialize 的,但是我們要注意下面的問題   import java.io.*;    import java.util.*;     public class UnstableCalendar impl

57、ements Serializable             public static void main(String args) throws Exception            Calendar cal1 = Calendar.getInstance();         

58、   cal1.set(2000, 7, 1, 0, 0 , 0);            cal1.set(Calendar.MILLISECOND, 0);            ObjectOutputStream out =          

59、0;     new ObjectOutputStream(                new FileOutputStream("newCalendar.out");            out.writeObject(cal1);   &#

60、160;        out.close();            ObjectInputStream in =                new ObjectInputStream(      

61、60;         new FileInputStream("newCalendar.out");            Calendar cal2 = (Calendar)in.readObject();            cal2.set(Calendar.MILLI

62、SECOND, 0);            System.out.println(cal2.getTime();              運行的結(jié)果竟然是: Thu Jan 01 00:00:00 PST 1970它被復原到 EPOC 的起始點,我們稱該 Calendar 是處于不穩(wěn)定狀態(tài)。這個問題的根本原因是 Java 在 serialize Gregorian

63、Calendar 時沒有保存所有的信息,所以當它被恢復到內(nèi)存中,又缺少足夠的信息時,Calendar 會被恢復到 EPOCH 的起始值。Calendar 對象由兩部分構(gòu)成:字段和相對于 EPOC 的微秒時間差。字段信息是由微秒時間差計算出的,而 set() 方法不會強制 Calendar 重新計算字段。這樣字段值就不對了。下面的代碼可以解決這個問題:   import java.io.*;    import java.util.*;     public class StableCalendar imp

64、lements Serializable            public static void main(String args) throws Exception            Calendar cal1 = Calendar.getInstance();          

65、;  cal1.set(2000, 7, 1, 0, 0 , 0);            cal1.set(Calendar.MILLISECOND, 0);            ObjectOutputStream out =           

66、60;    new ObjectOutputStream(                new FileOutputStream("newCalendar.out");            out.writeObject(cal1);    &

67、#160;       out.close();            ObjectInputStream in =                new ObjectInputStream(       &#

68、160;        new FileInputStream("newCalendar.out");            Calendar cal2 = (Calendar)in.readObject();            cal2.get(Calendar.MILLISECON

69、D); /先調(diào)用 get(),強制 Calendar 刷新            cal2.set(Calendar.MILLISECOND, 0);  /再設(shè)值            System.out.println(cal2.getTime();          

70、60;  運行的結(jié)果是: Tue Aug 01 00:00:00 PDT 2000,這個問題主要會影響到在 EJB 編程中,參數(shù)對象中包含 Calendar 時。經(jīng)過 Serialize/Deserialize 后,直接操作 Calendar 會產(chǎn)生不穩(wěn)定的情況。4. add() 與 roll() 的區(qū)別add() 的功能非常強大,add 可以對 Calendar 的字段進行計算。如果需要減去值,那么使用負數(shù)值就可以了,如 add(field, -value)。add() 有兩條規(guī)則:當被修改的字段超出它可以的范圍時,那么比它大的字段會自動修正。如:Calendar cal1 = C

71、alendar.getInstance();cal1.set(2000, 7, 31, 0, 0 , 0); /2000-8-31cal1.add(Calendar.MONTH, 1); /2000-9-31 => 2000-10-1,對嗎?System.out.println(cal1.getTime(); /結(jié)果是 2000-9-30 另一個規(guī)則是,如果比它小的字段是不可變的(由 Calendar 的實現(xiàn)類決定),那么該小字段會修正到變化最小的值。以上面的例子,9-31 就會變成 9-30,因為變化最小。Roll() 的規(guī)則只有一條:當被修改的字段超出它可以的范圍時,那么比

72、它大的字段不會被修正。如:Calendar cal1 = Calendar.getInstance();cal1.set(1999, 5, 6, 0, 0, 0); /1999-6-6, 周日cal1.roll(Calendar.WEEK_OF_MONTH, -1); /1999-6-1, 周二cal1.set(1999, 5, 6, 0, 0, 0); /1999-6-6, 周日cal1.add(Calendar.WEEK_OF_MONTH, -1); /1999-5-30, 周日WEEK_OF_MONTH 比 MONTH 字段小,所以 roll 不能修正 MONTH 字段。 我們

73、現(xiàn)在已經(jīng)能夠格式化并創(chuàng)建一個日期對象了, 但是我們?nèi)绾尾拍茉O(shè)置和獲取日期數(shù)據(jù)的特定部分呢, 比如說小時, 日, 或者分鐘? 我們又如何在日期的這些部分加上或者減去值呢? 答案是使用Calendar 類. 就如我們前面提到的那樣, Calendar 類中的方法替代了Date 類中被人唾罵的方法. 假設(shè)你想要設(shè)置, 獲取, 和操縱一個日期對象的各個部分, 比方一個月的一天或者是一個星期的一天. 為了演示這個過程, 我們將使用具體的子類 java.util.GregorianCalendar. 考慮下面的例子, 它計算得到下面的第十個星期五是13號. import java.util.Gregori

74、anCalendar; import java.util.Date; import java.text.DateFormat; public class DateExample5 public static void main(String args) DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL); / Create our Gregorian Calendar. GregorianCalendar cal = new GregorianCalendar(); / Set the date and time of our calendar / to the system&s date and time cal.setTime(new Date(); System.out.println("System Date: " + dateFormat.format(cal.getTime(); / Set the day of week to FRIDAY cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY); System.out.println(&q

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論