企業(yè)管理計算JAVA時間_第1頁
企業(yè)管理計算JAVA時間_第2頁
企業(yè)管理計算JAVA時間_第3頁
企業(yè)管理計算JAVA時間_第4頁
企業(yè)管理計算JAVA時間_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 Java統(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類型紀(jì)錄這些毫秒值.因為long是有符號整數(shù),所以日期可以在1970年1月1日之前,也可以在這之后。Long類型表示的最大正值和最大負(fù)值可以輕松的表示290,000,000年的時間,這適合大多數(shù)人的時間要求。 Date 類 Date類可以在java.util包中找到,用一個long類型的值表示一個指定的時刻。它的一個有用的構(gòu)造函數(shù)是Date(),它創(chuàng)

2、建一個表示創(chuàng)建時刻的對象。getTime()方法返回Date對象的long值。在下面的程序中,我使用Date()構(gòu)造函數(shù)創(chuàng)建一個表示程序運行時刻的對象,并且利用getTime()方法找到這個日期代表的毫秒數(shù)量: impoort javva.uutill.*; publlic claass Noww puubliic sstattic voiid mmainn(Sttrinng arrgs) Daate noww = neww Daate(); loong nowwLonng = noow.ggetTTimee(); Syysteem.oout.priintlln(vallue is + noo

3、wLoong); 當(dāng)我運行行這個程程序后,我得到到9722,5668,2255,1500.快速速確認(rèn)一一下這個個數(shù)字,起碼在在一個合合理的范范圍:它它不到331年,這個數(shù)數(shù)值相對對19770年11月1日日到我寫寫這篇文文章的時時間來說說,是合合理的。計算機機是這個個毫秒值值表示時時間,人人們可不不愿意說說 我我將在9996,3211,9998,334見到到你。幸運的的是,JJavaa提供了了一個轉(zhuǎn)轉(zhuǎn)換Daate對對象到字字符串的的途徑,表示成成傳統(tǒng)的的形式。我們在在下一節(jié)節(jié)討論DDateeForrmatt類,它它直觀的的建立日日期字符符串。 DateeForrmatt類 DateeForrma

4、tt類的一一個目標(biāo)標(biāo)是建立立一個人人們能夠夠識別的的字符串串。然而而,因為為語言的的差別,不是所所有的人人希望看看到嚴(yán)格格的相同同格式的的日期。法國人人更喜歡歡看到25 deccembbre 20000,但是是美國人人習(xí)慣看看到DDeceembeer 225,220000.所所以一個個DatteFoormaat的實實例創(chuàng)建建以后,這個對對象包含含了日期期的顯示示格式的的信息。如果使使用用戶戶電腦區(qū)區(qū)域設(shè)置置缺省的的格式,你可以以象下面面那樣,創(chuàng)建DDateeForrmatt對象,使用ggetDDateeInsstannce()方法法: DateeForrmatt dff = DatteFoor

5、maat.ggetDDateeInsstannce(); DateeForrmatt類在jjavaa.teext包包中可以以找到。 轉(zhuǎn)換成字字符串 你可以使使用foormaat()方法轉(zhuǎn)轉(zhuǎn)換Daate對對象為一一個字符符串。下下面的示示例程序序說明了了這個問問題: impoort javva.uutill.*; impoort javva.ttextt.*; publlic claass NowwStrringg puubliic sstattic voiid mmainn(Sttrinng arrgs) Daate noww = neww Daate(); DaateFFormmat df

6、= DDateeForrmatt.geetDaateIInsttancce(); Sttrinng ss = df.forrmatt(noow); Syysteem.oout.priintlln(Todday is + s); 在上面的的代碼中中,展示示了沒有有參數(shù),使用缺缺省格式式的geetDaateIInsttancce()方法。Javva還提提供了幾幾個選擇擇日期格格式,你你可以通通過使用用重載的的gettDatteInnstaancee(innt sstylle)獲獲得。出出于方便便的原因因,DaateFFormmat提提供了幾幾種預(yù)置置的常量量,你可可以使用用這些常常量參數(shù)數(shù)。下面面

7、是幾個個SHOORT, MEEDIUUM, LONNG, 和FUULL類類型的示示例: impoort javva.uutill.*; impoort javva.ttextt.*; publlic claass StyyleDDemoo puubliic sstattic voiid mmainn(Sttrinng arrgs) Daate noww = neww Daate(); DaateFFormmat df = DDateeForrmatt.geetDaateIInsttancce(); DaateFFormmat df11 = DatteFoormaat.ggetDDateeIns

8、stannce(DatteFoormaat.SSHORRT); DaateFFormmat df22 = DatteFoormaat.ggetDDateeInsstannce(DatteFoormaat.MMEDIIUM); DaateFFormmat df33 = DatteFoormaat.ggetDDateeInsstannce(DatteFoormaat.LLONGG); DaateFFormmat df44 = DatteFoormaat.ggetDDateeInsstannce(DatteFoormaat.FFULLL); Sttrinng ss = df.forrmatt(noo

9、w); Sttrinng ss1 = dff1.fformmat(noww); Sttrinng ss2 = dff2.fformmat(noww); Sttrinng ss3 = dff3.fformmat(noww); Sttrinng ss4 = dff4.fformmat(noww); Syysteem.oout.priintlln(Deefauult) Toodayy iss + ss); Syysteem.oout.priintlln(SHHORTT) Todday is + s11); Syysteem.oout.priintlln(MEEDIUUM) Todday is + s

10、22); Syysteem.oout.priintlln(LOONG) Todday is + s33); Syysteem.oout.priintlln(FUULL) Todday is + s44); 程序輸出出如下: (Deffaullt) Todday is Novv 8, 20000 (SHOORT) TTodaay iis 111/88/000(MEDDIUMM) TTodaay iis NNov 8, 20000 (LONNG) TTodaay iis NNoveembeer 88, 220000 (FULLL) TTodaay iis WWednnesdday, Noovemm

11、berr 8, 20000 同樣的程程序,在在我的電電腦上使使用缺省省設(shè)置運運行后,改變區(qū)區(qū)域設(shè)置置為瑞典典,輸出出如下: (Deffaullt) Todday is 20000-nnov-08 (SHOORT) TTodaay iis 220000-111-088(MEDDIUMM) TTodaay iis 220000-noov-008 (LONNG) TTodaay iis dden 8 nnoveembeer 220000 (FULLL) TTodaay iis dden 8 nnoveembeer 220000 從這里,你能看看到,瑞瑞典的月月份不是是大寫的的(雖然然Novvembb

12、er還還是noovemmberr).還還有,LLONGG和FUULL版版本在瑞瑞典語中中是一樣樣的,但但是美國國英語卻卻不同。另外,有趣的的是,瑞瑞典語單單詞的星星期三,onssdagg,沒有有包含在在FULLL日期期里,英英語卻包包括。 注意你能能夠使用用gettDatteInnstaancee()方方法改變變DatteFoormaat實例例的語種種;但是是,在上上面的例例子中,是通過過改變WWinddowss98的的控制面面板的區(qū)區(qū)域設(shè)置置做到的的。不同同的地方方的區(qū)域域設(shè)置不不同,結(jié)結(jié)果就不不同,這這樣有好好處,也也有不足足,Jaava程程序員應(yīng)應(yīng)該了解解這些。一個好好處是JJavaa程

13、序員員可以只只寫一行行代碼就就可以顯顯示日期期,而且且世界不不同地區(qū)區(qū)的電腦腦運行同同樣的程程序會有有不用的的日期格格式。 但是這這也是一一個缺點點,當(dāng)程程序員希希望顯示示同一種種格式的的時-這也有有可取之之處,舉舉例來說說,在程程序中混混合輸出出文本和和日期,如果文文本是英英文,我我們就不不希望日日期格式式是其他他的格式式,象德德文或是是西班牙牙文。如如果程序序員依靠靠日期格格式編程程,日期期格式將將根據(jù)運運行程序序所在電電腦的區(qū)區(qū)域設(shè)置置不用而而不同。 解析字符符串 通過paarsee()方方法,DDateeForrmatt能夠以以一個字字符串創(chuàng)創(chuàng)立一個個Datte對象象。這個個方法能能拋

14、出PParsseExxcepptioon異常常,所以以你必須須使用適適當(dāng)?shù)漠惍惓L幚砝砑夹g(shù)。下面的的例子程程序通過過字符串串創(chuàng)建DDatee對象: impoort javva.uutill.*; impoort javva.ttextt.*; publlic claass ParrseEExammplee puubliic sstattic voiid mmainn(Sttrinng arrgs) Sttrinng dds = NNoveembeer 11, 220000; DaateFFormmat df = DDateeForrmatt.geetDaateIInsttancce(); tr

15、ry Daate d = dff.paarsee(dss); caatchh(PaarseeExccepttionn e) Syysteem.oout.priintlln(Unaablee too paarsee + dds); 在創(chuàng)建一一個任意意的日期期時paarsee()方方法很有有用。我我將通過過另一種種方法創(chuàng)創(chuàng)建一個個任意得得日期。同時,你將看看到怎樣樣進行基基本日期期計算,例如計計算900天后的的另一天天。你可可以使用用GreegorriannCallenddar類類來完成成這個任任務(wù)。 GreggoriianCCaleendaar類 創(chuàng)建一個個代表任任意日期期的一個個途徑使使用Gr

16、regooriaanCaalenndarr類的構(gòu)構(gòu)造函數(shù)數(shù),它包包含在jjavaa.uttil包包中: GreggoriianCCaleendaar(iint yeaar, intt moonthh, iint datte) 注意月份份的表示示,一月月是0,二月是是1,以以此類推推,是112月是是11。因為大大多數(shù)人人習(xí)慣于于使用單單詞而不不是使用用數(shù)字來來表示月月份,這這樣程序序也許更更易讀,父類CCaleendaar使用用常量來來表示月月份:JJANUUARYY, FFEBRRUARRY,等等等。所所以,創(chuàng)創(chuàng)建Wiilbuur 和和 Orrvillle制制造第一一架動力力飛機的的日期(De

17、ccembber 17, 19903),你可可以使用用: GreggoriianCCaleendaar ffirsstFllighht = neew GGreggoriianCCaleendaar(119033, CCaleendaar.DDECEEMBEER, 17); 出于清楚楚的考慮慮,你應(yīng)應(yīng)該使用用前面的的形式。但是,你也應(yīng)應(yīng)該學(xué)習(xí)習(xí)怎樣閱閱讀下面面的短格格式。下下面的例例子同樣樣表示DDeceembeer 117,119033(記住住,在短短格式中中,111表示DDeceembeer) GreggoriianCCaleendaar ffirsstFllighht = neew GGr

18、eggoriianCCaleendaar(119033, 111, 17); 在上一節(jié)節(jié)中,你你學(xué)習(xí)了了轉(zhuǎn)換DDatee對象到到字符串串。這里里,你可可以做同同樣的事事情;但但是首先先,你需需要將GGreggoriianCCaleendaar對象象轉(zhuǎn)換到到Datte。要要做到這這一點,你可以以使用ggetTTimee()方方法,從從它得父父類Caalenndarr繼承而而來。GGetTTimee()方方法返回回GreegorriannCallenddar相相應(yīng)的DDatee對象。你能夠夠創(chuàng)建GGreggoriianCCaleendaar對象象,轉(zhuǎn)換換到Daate對對象,得得到和輸輸出相應(yīng)應(yīng)的字

19、符符串這樣樣一個過過程。下下面是例例子: impoort javva.uutill.*; impoort javva.ttextt.*; publlic claass Fliightt puubliic sstattic voiid mmainn(Sttrinng arrgs) GrregooriaanCaalenndarr fiirsttFliightt = neww GrregooriaanCaalenndarr(19903, Caalenndarr.DEECEMMBERR, 117); Daate d = fiirsttFliightt.geetTiime(); DaateFFormma

20、t df = DDateeForrmatt.geetDaateIInsttancce(); Sttrinng ss = df.forrmatt(d); Syysteem.oout.priintlln(Firrst fliightt waas + s); 有時候創(chuàng)創(chuàng)建一個個代表當(dāng)當(dāng)前時刻刻的GrregooriaanCaalenndarr類的實實例是很很有用的的。你可可以簡單單的使用用沒有參參數(shù)的GGreggoriianCCaleendaar構(gòu)造造函數(shù),象這樣樣: GreggoriianCCaleendaar tthissdayy = neww GrregooriaanCaalenndarr();

21、 一個輸出出今天日日期的例例子程序序,使用用GreegorriannCallenddar對對象: impoort javva.uutill.*; impoort javva.ttextt.*; classs TTodaay puubliic sstattic voiid mmainn(Sttrinng arrgs) GrregooriaanCaalenndarr thhisdday = nnew GreegorriannCallenddar(); Daate d = thhisdday.gettTimme(); DaateFFormmat df = DDateeForrmatt.geetDaa

22、teIInsttancce(); Sttrinng ss = df.forrmatt(d); Syysteem.oout.priintlln(Todday is + s); 注意到,Datte()構(gòu)造函函數(shù)和GGreggoriianCCaleendaar()構(gòu)造函函數(shù)很類類似:都都創(chuàng)建一一個對象象,條件件簡單,代表今今天。 日期處理理 GreggoriianCCaleendaar類提提供處理理日期的的方法。一個有有用的方方法是aadd().使使用addd()方法,你能夠夠增加象象年,月月數(shù),天天數(shù)到日日期對象象中。要要使用aadd()方法法,你必必須提供供要增加加的字段段,要增增加的數(shù)數(shù)量。一

23、一些有用用的字段段是DAATE, MOONTHH, YYEARR, 和和 WEEEK_OF_YEAAR。下下面的程程序使用用addd()方方法計算算未來880天的的一個日日期。在在Julles的的是一一個重要要的數(shù)字字,使用用這個程程序可以以計算PPhilleass Foogg從從出發(fā)的的那一天天18772年110月22日后880天的的日期: impoort javva.uutill.*; impoort javva.ttextt.*; publlic claass Worrld puubliic sstattic voiid mmainn(Sttrinng arrgs) Grregooria

24、anCaalenndarr woorlddTouur = neew GGreggoriianCCaleendaar(118722, CCaleendaar.OOCTOOBERR, 22); woorlddTouur.aadd(GreegorriannCallenddar.DATTE, 80); Daate d = woorlddTouur.ggetTTimee(); DaateFFormmat df = DDateeForrmatt.geetDaateIInsttancce(); Sttrinng ss = df.forrmatt(d); Syysteem.oout.priintlln(80

25、dayy trrip willl eend + s); 這個例子子是想象象的,但但在一個個日期上上增加天天數(shù)是一一個普遍遍的操作作:影碟碟可以租租3天,圖書館館可以借借書211天,商商店經(jīng)常常需要將將購買的的物品在在30天天內(nèi)賣出出。下面面的程序序演示了了使用年年計算: impoort javva.uutill.*; impoort javva.ttextt.*; publlic claass Morrtgaage puubliic sstattic voiid mmainn(Sttrinng arrgs) GrregooriaanCaalenndarr moortggagee = neww

26、GrregooriaanCaalenndarr(19997, Caalenndarr.MAAY, 18); moortggagee.addd(CCaleendaar.YYEARR, 115); Daate d = moortggagee.geetTiime(); DaateFFormmat df = DDateeForrmatt.geetDaateIInsttancce(); Sttrinng ss = df.forrmatt(d); Syysteem.oout.priintlln(15 yeaar mmorttgagge aamorrtizzed on + s); aadd()一個個重要的的

27、副作用用是它改改變的原原來的日日期。有有時候,擁有原原始日期期和修改改后的日日期很重重要。不不幸的是是,你不不能簡單單的創(chuàng)建建一個GGreggoriianCCaleendaar對象象,設(shè)置置它和原原來的相相等(eequaal)。原因是是兩個變變量指向向同一個個Datte()對象地地址。如如果Daate對對象改變變,兩個個變量就就指向改改變后的的日期對對象。代代替這種種做法,應(yīng)該創(chuàng)創(chuàng)建一個個新對象象。下面面的程序序示范了了這種做做法: impoort javva.uutill.*; impoort javva.ttextt.*; publlic claass ThrreeDDatees puub

28、liic sstattic voiid mmainn(Sttrinng arrgs) GrregooriaanCaalenndarr gcc1 = neew GGreggoriianCCaleendaar(220000, CCaleendaar.JJANUUARYY, 11); GrregooriaanCaalenndarr gcc2 = gcc1; GrregooriaanCaalenndarr gcc3 = neew GGreggoriianCCaleendaar(220000, CCaleendaar.JJANUUARYY, 11); /Thrree dattes alll eqqual

29、l too Jaanuaary 1, 20000 gcc1.aadd(Callenddar.YEAAR, 1); fiile:/ggc1 andd gcc2 aare chaangeed DaateFFormmat df = DDateeForrmatt.geetDaateIInsttancce(); Daate d1 = ggc1.gettTimme(); Daate d2 = ggc2.gettTimme(); Daate d3 = ggc3.gettTimme(); Sttrinng ss1 = dff.foormaat(dd1); Sttrinng ss2 = dff.foormaat

30、(dd2); Sttrinng ss3 = dff.foormaat(dd3); Syysteem.oout.priintlln(gc11 iss + ss1); Syysteem.oout.priintlln(gc22 iss + ss2); Syysteem.oout.priintlln(gc33 iss + ss3); 程程序運行行后,ggc1和和gc22被變成成20001年(因為兩兩個對象象指向同同一個DDatee,而DDatee已經(jīng)被被改變了了)。對對象gcc3指向向一個單單獨的DDatee,它沒沒有被改改變。 計算復(fù)習(xí)習(xí)日期 在這節(jié),你將看看到一個個依據(jù)現(xiàn)現(xiàn)實世界界的例子子。這個個

31、詳細(xì)的的程序計計算過去去一個具具體的日日期。例例如,你你閱讀這這篇文章章,你想想要記住住一個印印象深刻刻的知識識點。如如果你沒沒有照片片一樣的的記憶力力,你就就要定期期的復(fù)習(xí)習(xí)這些新新資料,這將幫幫助你記記住它。關(guān)于復(fù)復(fù)習(xí)系統(tǒng)統(tǒng),Kuurt Hannks 和 GGerrreldd L. Puulsiipheer在他他們的中有討討論,建建議看過過第一眼眼后馬上上回顧一一下,然然后是11天后,1個星星期后,1個月月后,33個月后后,1年年后。我我的這篇篇文章,你要馬馬上回顧顧一下,從現(xiàn)在在算起,再就是是明天,然后是是1個星星期,11個月,3個月月,1年年后。我我們的程程序?qū)⒂嬘嬎氵@些些日期。 這個

32、程序序非常有有用的,它將是是PIMM(Peersoonall Innforrmattionn Maanagger個個人信息息管理器器)的一一個組成成部分,并將確確定復(fù)習(xí)習(xí)時間。在下面面的程序序中,ggetDDatees()方法對對一個返返回日期期數(shù)組(復(fù)習(xí)日日期)的的電子軟軟件很有有用。另另外,你你可以返返回單獨獨的一個個日期,使用ggetFFirsstDaay(),geetOnneDaay(),geetOnneWeeek(),ggetOOnMoonthh()和和gettOneeYeaar().當(dāng)時時間范圍圍超出這這個PIIM的RReviiewDDatees的計計算范圍圍時ReevieewDa

33、atess類演示示了怎樣樣計算時時間段?,F(xiàn)在,你可以以容易的的修改它它用來處處理你需需要的時時間段,象圖書書館借書書,錄影影帶租賃賃和抵押押計算。首先,RevviewwDattes類類顯示在在下面: impoort javva.uutill.*; impoort javva.ttextt.*; publlic claass RevviewwDattes prrivaate GreegorriannCallenddar firrstDDay, onneDaay, oneeWeeek, oneeMonnth, onneQuuartter, onneYeear; fiinall innt ddate

34、eArrraySSizee = 6; ReevieewDaatess(GrregooriaanCaalenndarr gccDatte) innt yyearr = gcDDatee.geet(GGreggoriianCCaleendaar.YYEARR); innt mmontth = gccDatte.gget(GreegorriannCallenddar.MONNTH); innt ddatee = gcDDatee.geet(GGreggoriianCCaleendaar.DDATEE); fiirsttDayy = neww GrregooriaanCaalenndarr(yeear

35、, moonthh, ddatee); onneDaay = neew GGreggoriianCCaleendaar(yyearr, mmontth, datte); onneWeeek = nnew GreegorriannCallenddar(yeaar, monnth, daate); onneMoonthh = neww GrregooriaanCaalenndarr(yeear, moonthh, ddatee); onneQuuartter = nnew GreegorriannCallenddar(yeaar, monnth, daate); onneYeear = nnew

36、GreegorriannCallenddar(yeaar, monnth, daate); onneDaay.aadd(GreegorriannCallenddar.DATTE, 1); onneWeeek.addd(GrregooriaanCaalenndarr.DAATE, 7); onneMoonthh.addd(GGreggoriianCCaleendaar.MMONTTH, 1); onneQuuartter.addd(GrregooriaanCaalenndarr.MOONTHH, 33); onneYeear.addd(GrregooriaanCaalenndarr.YEEAR,

37、 1); ReevieewDaatess() thhis(neww GrregooriaanCaalenndarr(); puubliic vvoidd liistDDatees() DaateFFormmat df = DDateeForrmatt.geetDaateIInsttancce(DDateeForrmatt.LOONG); Daate staartDDatee = firrstDDay.gettTimme(); Daate datte1 = ooneDDay.gettTimme(); Daate datte2 = ooneWWeekk.geetTiime(); Daate dat

38、te3 = ooneMMontth.ggetTTimee(); Daate datte4 = ooneQQuarrterr.geetTiime(); Daate datte5 = ooneYYearr.geetTiime(); Sttrinng sss = dff.foormaat(sstarrtDaate); Sttrinng sss1 = ddf.fformmat(datte1); Sttrinng sss2 = ddf.fformmat(datte2); Sttrinng sss3 = ddf.fformmat(datte3); Sttrinng sss4 = ddf.fformmat(datte4); Sttrinng sss5 = ddf.fformmat(datte5); Syysteem.oout.priintlln(Staart datte iis + ss); Syysteem.oout.priintlln(Folllowwingg reevieew ddatees aare:); Syysteem.oout.priintlln(sss1); Syysteem.oout.priintlln(sss2); Syysteem.oout.priint

溫馨提示

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

評論

0/150

提交評論