Java的時(shí)間處理(續(xù)計(jì)算Java時(shí)間)_第1頁
Java的時(shí)間處理(續(xù)計(jì)算Java時(shí)間)_第2頁
Java的時(shí)間處理(續(xù)計(jì)算Java時(shí)間)_第3頁
Java的時(shí)間處理(續(xù)計(jì)算Java時(shí)間)_第4頁
Java的時(shí)間處理(續(xù)計(jì)算Java時(shí)間)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Java的時(shí)間處理(續(xù)學(xué)習(xí)在java中計(jì)算基本的時(shí)間段概述如果你知道怎樣在java中使用日期,那么使用時(shí)間和它才不多一樣簡單。這篇文章告訴你怎樣把他們的差別聯(lián)系起來。Robert Nielsen還告訴你怎樣使用java來計(jì)算抵達(dá)航班和制造過程的時(shí)間。作者:Robert Nielsen翻譯:Cocia Lin這篇文章是在我發(fā)表過的(譯者:已經(jīng)翻譯完成的基礎(chǔ)上的。在這里,我列出那篇文章幾個(gè)你應(yīng)該熟悉得關(guān)鍵點(diǎn)。如果這幾點(diǎn)你不太清楚,我建議你讀一下,了解一下。1. Java計(jì)算時(shí)間依靠1970年1月1日開始的毫秒數(shù).2. Date類的構(gòu)造函數(shù)Date(返回代表當(dāng)前創(chuàng)建的時(shí)刻的對象。Date的方法get

2、Time(返回一個(gè)long值在數(shù)值上等于1970年1月1日之前或之后的時(shí)刻。3. DateFormat類用來轉(zhuǎn)換Date到String,反之亦然。靜態(tài)方法getDateInstance(返回DateFormat 的缺省格式;getDateInstance(DateFormat.FIELD返回指定的DateFormat對象格式。Format(Date d方法返回String表示日期,例如January 1,2002.反過來,parse(String s方法返回以參數(shù)字符串表示的Date對象。4. format(方法返回的字符串格式根據(jù)不同地區(qū)的時(shí)間設(shè)置而有所不同。5. GregorianCale

3、ndear類有兩個(gè)重要的構(gòu)造函數(shù):GregorianCalerdar(,返回代表當(dāng)前創(chuàng)建時(shí)間的對象;GregorianCalendar(int year,int month,int date返回代表任意日期的對象。GregorianCalendar類的getTime(方法返回日期對象。Add(int field,int amount方法通過加或減時(shí)間單位,象天數(shù),月數(shù)或年數(shù)來計(jì)算日期。GregorianCalendar和時(shí)間兩個(gè)GregorianCalendar的構(gòu)造函數(shù)可以用來處理時(shí)間。前者創(chuàng)建一個(gè)表示日期,小時(shí)和分鐘的對象:GregorianCalendar(int year, int m

4、onth, int date, int hour, int minute第二個(gè)創(chuàng)建一個(gè)表示一個(gè)日期,小時(shí),分鐘和秒:GregorianCalendar(int year, int month, int date, int hour, int minute, int second首先,我應(yīng)該提醒一下,每一個(gè)構(gòu)造函數(shù)需要時(shí)間信息中的日期信息(年,月,日。如果你想說2:30 p.m.,你必須指出日期。同樣,每一個(gè)GregorianCalendar構(gòu)造函數(shù)創(chuàng)建一個(gè)在時(shí)間上使用毫秒計(jì)算的對象。所以,如果你的構(gòu)造函數(shù)只提供年,月,日參數(shù),那小時(shí),分鐘,秒和毫秒的值將被置0. DateFormat和時(shí)間你可

5、以使用靜態(tài)方法getDateTimeInstance(int dateStyle,int timeStyle來建立DateFormat對象來顯示時(shí)間和日期。這個(gè)方法表明你想要的日期和時(shí)間格式。如果你喜歡使用缺省格式,可以使用getDateTimeInstance(來代替它。你可以使用靜態(tài)方法getTimeInstance(int timeStyle創(chuàng)建DateFormat對象來顯示正確的時(shí)間。下面的程序示范了getDateTimeInstance(和getTimeInstance(怎樣工作:public class Apollo public static void main(String a

6、rgs GregorianCalendar liftOffApollo11 = new GregorianCalendar(1969, Calendar.JULY, 16, 9, 32;Date d = liftOffApollo11.getTime(;DateFormat df1 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM;DateFormat df2 = DateFormat.getTimeInstance(DateFormat.SHORT;String s1 = df1.format(d;St

7、ring s2 = df2.format(d;在我的電腦上,上面的程序顯示如下:Jul 16, 1969 9:32:00 AM9:32 AM(輸出根據(jù)你所在得地區(qū)有所不同計(jì)算時(shí)間間隔你可能有時(shí)需要計(jì)算過去的時(shí)間;例如,給你開始和結(jié)束時(shí)間,你想知道制造流程的持續(xù)時(shí)間。一個(gè)出租公司按小時(shí)或天數(shù)出租東西,計(jì)算時(shí)間對他們也很有用。同樣的,在金融界,經(jīng)常需要計(jì)算重要的支付時(shí)間。將問題復(fù)雜化,人類至少是用兩種方法計(jì)算時(shí)間。你可以說一天已經(jīng)結(jié)束當(dāng)24小時(shí)過去了,或者日歷從今天翻到明天。我們將討論我們想到的這兩種情況。時(shí)間段,情況1:嚴(yán)格時(shí)間單位在這種情況中,只有24小時(shí)過去,這天才過去,60分鐘過去,這個(gè)小

8、時(shí)才過去,60秒過去,這個(gè)分鐘才過去,以此類推。在這個(gè)方法中,23小時(shí)的時(shí)間將被認(rèn)為是0天。使用這種方法計(jì)算時(shí)間段,你從計(jì)算過去的毫秒開始。為了做到這一點(diǎn),首先轉(zhuǎn)換每個(gè)日期為從1970年1月1日起得毫秒數(shù)。你可以從第二個(gè)毫秒值中減去第一個(gè)毫秒值。這里有一個(gè)簡單的計(jì)算:public class ElapsedMillis public static void main(String args GregorianCalendar gc1 = new GregorianCalendar(1995, 11, 1, 3, 2, 1;GregorianCalendar gc2 = new Gregoria

9、nCalendar(1995, 11, 1, 3, 2, 2;/ the above two dates are one second apartDate d1 = gc1.getTime(;Date d2 = gc2.getTime(;long l1 = d1.getTime(;long l2 = d2.getTime(;long difference = l2 - l1;上面的程序打印如下:Elapsed milliseconds: 1000這個(gè)程序也帶來一點(diǎn)混淆。GregorianCalendar類的getTime(返回一個(gè)Date對象,Date類的getTime(方法返回從1970年1

10、月1日到這個(gè)時(shí)間的long類型的毫秒數(shù)值。雖然他們的方法名字相同,返回值卻不一樣!下面的程序片斷用簡單的整數(shù)除法轉(zhuǎn)換毫秒到秒:long milliseconds = 1999;long seconds = 1999 / 1000;這種方法舍去小數(shù)部分轉(zhuǎn)換毫秒到秒,所以1,999毫秒等于1秒,2,000毫秒等于2秒。計(jì)算更大的單位-例如天數(shù),小時(shí)和分鐘-給定一個(gè)時(shí)間數(shù)值,可以使用下面的過程:1. 計(jì)算最大的單位,減去這個(gè)數(shù)值的秒數(shù)2. 計(jì)算第二大單位,減去這個(gè)數(shù)值的秒數(shù)3. 重復(fù)操作直到只剩下秒例如,如果你的時(shí)間的10,000秒,你想知道這個(gè)數(shù)值相應(yīng)的是多少小時(shí),多少分鐘,多少秒,你從最大的單位

11、開始:小時(shí)。10,000除以3600(一個(gè)小時(shí)的秒數(shù)得到小時(shí)數(shù)。使用整數(shù)除法,答案是2小時(shí)(整數(shù)除法中小數(shù)舍去計(jì)算剩下的秒數(shù),10,000-(3,600 x 2 = 2,800秒。所以你有2小時(shí)和2,800秒。將2,800秒轉(zhuǎn)換成分鐘,2,800除以60。使用整數(shù)除法,答案是46。2,800 - (60 x 46 = 40秒。最后答案是2小時(shí),46分,40秒。下面的Java程序使用上面的計(jì)算方法:public class Elapsed1 public void calcHMS(int timeInSeconds int hours, minutes, seconds;hours = time

12、InSeconds / 3600;timeInSeconds = timeInSeconds - (hours * 3600;minutes = timeInSeconds / 60;timeInSeconds = timeInSeconds - (minutes * 60;seconds = timeInSeconds;public static void main(String args Elapsed1 elap = new Elapsed1(;elap.calcHMS(10000;輸出結(jié)果如下:2 hour(s 46 minute(s 40 second(s上面的程序甚至在時(shí)間少于一個(gè)

13、小時(shí)也可以正確的計(jì)算小時(shí)數(shù)。例如,你用上面的程序計(jì)算1,000秒,輸出入下:0 hour(s 16 minute(s 40 second(s舉一個(gè)現(xiàn)實(shí)世界的例子,下面的程序計(jì)算阿波羅11飛到月球使用得時(shí)間:public class LunarLanding public long getElapsedSeconds(GregorianCalendar gc1, GregorianCalendar gc2 Date d1 = gc1.getTime(;Date d2 = gc2.getTime(;long l1 = d1.getTime(;long l2 = d2.getTime(;long d

14、ifference = Math.abs(l2 - l1;return difference / 1000;public void calcHM(long timeInSeconds long hours, minutes, seconds;hours = timeInSeconds / 3600;timeInSeconds = timeInSeconds - (hours * 3600;minutes = timeInSeconds / 60;public static void main(String args GregorianCalendar lunarLanding = new Gr

15、egorianCalendar(1969, Calendar.JULY, 20, 16,17;GregorianCalendar lunarDeparture = new GregorianCalendar(1969, Calendar.JULY, 21, 13, 54;GregorianCalendar startEVA = new GregorianCalendar(1969, Calendar.JULY, 20, 22, 56;GregorianCalendar endEVA = new GregorianCalendar(1969, Calendar.JULY, 21, 1, 9;Lu

16、narLanding apollo = new LunarLanding(;long eva = apollo.getElapsedSeconds(startEVA, endEVA;apollo.calcHM(eva;long lunarStay = apollo.getElapsedSeconds(lunarLanding, lunarDeparture;apollo.calcHM(lunarStay;上面程序輸出如下:EVA duration = 2 hour(s 13 minute(sLunar stay = 21 hour(s 37 minute(s目前為止,我們計(jì)算的基礎(chǔ)公式是這樣的:1分鐘=60秒,1小時(shí)=60分,1天=24小時(shí)。1個(gè)月=?天,1年=?天怎么辦?月份的天數(shù)有28,29,30,31;一年可以是365或366天。因此,當(dāng)你試圖計(jì)算嚴(yán)格單位的月份和年時(shí),問題就產(chǎn)生了。例如,如果你使用月份的平均天數(shù)(近似30.4375,并且計(jì)算下面的時(shí)間間隔:* July 1, 2:00 a.m. to July 31, 10:00 p.m.* February 1, 2:00 a.m. to February 29, 10:00 p.m.第一個(gè)計(jì)算結(jié)果是1個(gè)月;第二個(gè)結(jié)果是0個(gè)月!所以,在計(jì)算嚴(yán)

溫馨提示

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

評論

0/150

提交評論