企业管理计算JAVA时间_第1页
企业管理计算JAVA时间_第2页
企业管理计算JAVA时间_第3页
企业管理计算JAVA时间_第4页
企业管理计算JAVA时间_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 Java统计从1970年1月1日起的毫秒的数量表示日期。也就是说,例如,1970年1月2日,是在1月1日后的86,400,000毫秒。同样的,1969年12月31日是在1970年1月1日前86,400,000毫秒。Java的Date类使用long类型纪录这些毫秒值.因为long是有符号整数,所以日期可以在1970年1月1日之前,也可以在这之后。Long类型表示的最大正值和最大负值可以轻松的表示290,000,000年的时间,这适合大多数人的时间要求。 Date 类 Date类可以在java.util包中找到,用一个long类型的值表示一个指定的时刻。它的一个有用的构造函数是Date(),它创

2、建一个表示创建时刻的对象。getTime()方法返回Date对象的long值。在下面的程序中,我使用Date()构造函数创建一个表示程序运行时刻的对象,并且利用getTime()方法找到这个日期代表的毫秒数量: 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); 当我运行行这个程程序后,我得到到9722,5668,2255,1500.快速速确认一一下这个个数字,起码在在一个合合理的范范围:它它不到331年,这个数数值相对对19770年11月1日日到我写写这篇文文章的时时间来说说,是合合理的。计算机机是这个个毫秒值值表示时时间,人人们可不不愿意说说 我我将在9996,3211,9998,334见到到你。幸运的的是,JJavaa提供了了一个转转换Daate对对象到字字符串的的途径,表示成成传统的的形式。我们在在下一节节讨论DDateeForrmatt类,它它直观的的建立日日期字符符串。 DateeForrmatt类 DateeForrma

4、tt类的一一个目标标是建立立一个人人们能够够识别的的字符串串。然而而,因为为语言的的差别,不是所所有的人人希望看看到严格格的相同同格式的的日期。法国人人更喜欢欢看到25 deccembbre 20000,但是是美国人人习惯看看到DDeceembeer 225,220000.所所以一个个DatteFoormaat的实实例创建建以后,这个对对象包含含了日期期的显示示格式的的信息。如果使使用用户户电脑区区域设置置缺省的的格式,你可以以象下面面那样,创建DDateeForrmatt对象,使用ggetDDateeInsstannce()方法法: DateeForrmatt dff = DatteFoor

5、maat.ggetDDateeInsstannce(); DateeForrmatt类在jjavaa.teext包包中可以以找到。 转换成字字符串 你可以使使用foormaat()方法转转换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); 在上面的的代码中中,展示示了没有有参数,使用缺缺省格式式的geetDaateIInsttancce()方法。Javva还提提供了几几个选择择日期格格式,你你可以通通过使用用重载的的gettDatteInnstaancee(innt sstylle)获获得。出出于方便便的原因因,DaateFFormmat提提供了几几种预置置的常量量,你可可以使用用这些常常量参数数。下面面

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 同样的程程序,在在我的电电脑上使使用缺省省设置运运行后,改变区区域设置置为瑞典典,输出出如下: (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的的控制面面板的区区域设置置做到的的。不同同的地方方的区域域设置不不同,结结果就不不同,这这样有好好处,也也有不足足,Jaava程程序员应应该了解解这些。一个好好处是JJavaa程

13、序员员可以只只写一行行代码就就可以显显示日期期,而且且世界不不同地区区的电脑脑运行同同样的程程序会有有不用的的日期格格式。 但是这这也是一一个缺点点,当程程序员希希望显示示同一种种格式的的时-这也有有可取之之处,举举例来说说,在程程序中混混合输出出文本和和日期,如果文文本是英英文,我我们就不不希望日日期格式式是其他他的格式式,象德德文或是是西班牙牙文。如如果程序序员依靠靠日期格格式编程程,日期期格式将将根据运运行程序序所在电电脑的区区域设置置不用而而不同。 解析字符符串 通过paarsee()方方法,DDateeForrmatt能够以以一个字字符串创创立一个个Datte对象象。这个个方法能能抛

14、出PParsseExxcepptioon异常常,所以以你必须须使用适适当的异异常处理理技术。下面的的例子程程序通过过字符串串创建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); 在创建一一个任意意的日期期时paarsee()方方法很有有用。我我将通过过另一种种方法创创建一个个任意得得日期。同时,你将看看到怎样样进行基基本日期期计算,例如计计算900天后的的另一天天。你可可以使用用GreegorriannCallenddar类类来完成成这个任任务。 GreggoriianCCaleendaar类 创建一个个代表任任意日期期的一个个途径使使用Gr

16、regooriaanCaalenndarr类的构构造函数数,它包包含在jjavaa.uttil包包中: GreggoriianCCaleendaar(iint yeaar, intt moonthh, iint datte) 注意月份份的表示示,一月月是0,二月是是1,以以此类推推,是112月是是11。因为大大多数人人习惯于于使用单单词而不不是使用用数字来来表示月月份,这这样程序序也许更更易读,父类CCaleendaar使用用常量来来表示月月份:JJANUUARYY, FFEBRRUARRY,等等等。所所以,创创建Wiilbuur 和和 Orrvillle制制造第一一架动力力飞机的的日期(De

17、ccembber 17, 19903),你可可以使用用: GreggoriianCCaleendaar ffirsstFllighht = neew GGreggoriianCCaleendaar(119033, CCaleendaar.DDECEEMBEER, 17); 出于清楚楚的考虑虑,你应应该使用用前面的的形式。但是,你也应应该学习习怎样阅阅读下面面的短格格式。下下面的例例子同样样表示DDeceembeer 117,119033(记住住,在短短格式中中,111表示DDeceembeer) GreggoriianCCaleendaar ffirsstFllighht = neew GGr

18、eggoriianCCaleendaar(119033, 111, 17); 在上一节节中,你你学习了了转换DDatee对象到到字符串串。这里里,你可可以做同同样的事事情;但但是首先先,你需需要将GGreggoriianCCaleendaar对象象转换到到Datte。要要做到这这一点,你可以以使用ggetTTimee()方方法,从从它得父父类Caalenndarr继承而而来。GGetTTimee()方方法返回回GreegorriannCallenddar相相应的DDatee对象。你能够够创建GGreggoriianCCaleendaar对象象,转换换到Daate对对象,得得到和输输出相应应的字

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); 有时候创创建一个个代表当当前时刻刻的GrregooriaanCaalenndarr类的实实例是很很有用的的。你可可以简单单的使用用没有参参数的GGreggoriianCCaleendaar构造造函数,象这样样: 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()构造函函数和GGreggoriianCCaleendaar()构造函函数很类类似:都都创建一一个对象象,条件件简单,代表今今天。 日期处理理 GreggoriianCCaleendaar类提提供处理理日期的的方法。一个有有用的方方法是aadd().使使用addd()方法,你能够够增加象象年,月月数,天天数到日日期对象象中。要要使用aadd()方法法,你必必须提供供要增加加的字段段,要增增加的数数量。一

23、一些有用用的字段段是DAATE, MOONTHH, YYEARR, 和和 WEEEK_OF_YEAAR。下下面的程程序使用用addd()方方法计算算未来880天的的一个日日期。在在Julles的的是一一个重要要的数字字,使用用这个程程序可以以计算PPhilleass Foogg从从出发的的那一天天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); 这个例子子是想象象的,但但在一个个日期上上增加天天数是一一个普遍遍的操作作:影碟碟可以租租3天,图书馆馆可以借借书211天,商商店经常常需要将将购买的的物品在在30天天内卖出出。下面面的程序序演示了了使用年年计算: 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、副作用用是它改改变的原原来的日日期。有有时候,拥有原原始日期期和修改改后的日日期很重重要。不不幸的是是,你不不能简单单的创建建一个GGreggoriianCCaleendaar对象象,设置置它和原原来的相相等(eequaal)。原因是是两个变变量指向向同一个个Datte()对象地地址。如如果Daate对对象改变变,两个个变量就就指向改改变后的的日期对对象。代代替这种种做法,应该创创建一个个新对象象。下面面的程序序示范了了这种做做法: 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已经被被改变了了)。对对象gcc3指向向一个单单独的DDatee,它没没有被改改变。 计算复习习日期 在这节,你将看看到一个个依据现现实世界界的例子子。这个个

31、详细的的程序计计算过去去一个具具体的日日期。例例如,你你阅读这这篇文章章,你想想要记住住一个印印象深刻刻的知识识点。如如果你没没有照片片一样的的记忆力力,你就就要定期期的复习习这些新新资料,这将帮帮助你记记住它。关于复复习系统统,Kuurt Hannks 和 GGerrreldd L. Puulsiipheer在他他们的中有讨讨论,建建议看过过第一眼眼后马上上回顾一一下,然然后是11天后,1个星星期后,1个月月后,33个月后后,1年年后。我我的这篇篇文章,你要马马上回顾顾一下,从现在在算起,再就是是明天,然后是是1个星星期,11个月,3个月月,1年年后。我我们的程程序将计计算这些些日期。 这个

32、程序序非常有有用的,它将是是PIMM(Peersoonall Innforrmattionn Maanagger个个人信息息管理器器)的一一个组成成部分,并将确确定复习习时间。在下面面的程序序中,ggetDDatees()方法对对一个返返回日期期数组(复习日日期)的的电子软软件很有有用。另另外,你你可以返返回单独独的一个个日期,使用ggetFFirsstDaay(),geetOnneDaay(),geetOnneWeeek(),ggetOOnMoonthh()和和gettOneeYeaar().当时时间范围围超出这这个PIIM的RReviiewDDatees的计计算范围围时ReevieewDa

33、atess类演示示了怎样样计算时时间段。现在,你可以以容易的的修改它它用来处处理你需需要的时时间段,象图书书馆借书书,录影影带租赁赁和抵押押计算。首先,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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论