您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > java的时间处理(续计算java时间)
1.java计算时间依靠1970年1月1日开始的毫秒数.2.date类的构造函数date()返回代表当前创建的时刻的对象。date的方法gettime()返回一个long值在数值上等于1970年1月1日之前或之后的时刻。3.dateformat类用来转换date到string,反之亦然。静态方法getdateinstance()返回dateformat的缺省格式;getdateinstance(dateformat.field)返回指定的dateformat对象格式。format(dated)方法返回string表示日期,例如"january1,2002."反过来,parse(strings)方法返回以参数字符串表示的date对象。4.format()方法返回的字符串格式根据不同地区的时间设置而有所不同。5.gregoriancalendear类有两个重要的构造函数:gregoriancalerdar(),返回代表当前创建时间的对象;gregoriancalendar(intyear,intmonth,intdate)返回代表任意日期的对象。gregoriancalendar类的gettime()方法返回日期对象。add(intfield,intamount)方法通过加或减时间单位,象天数,月数或年数来计算日期。gregoriancalendar和时间两个gregoriancalendar的构造函数可以用来处理时间。前者创建一个表示日期,小时和分钟的对象:gregoriancalendar(intyear,intmonth,intdate,inthour,intminute)第二个创建一个表示一个日期,小时,分钟和秒:gregoriancalendar(intyear,intmonth,intdate,inthour,intminute,intsecond)首先,我应该提醒一下,每一个构造函数需要时间信息中的日期信息(年,月,日)。如果你想说2:30p.m.,你必须指出日期。同样,每一个gregoriancalendar构造函数创建一个在时间上使用毫秒计算的对象。所以,如果你的构造函数只提供年,月,日参数,那小时,分钟,秒和毫秒的值将被置0.dateformat和时间你可以使用静态方法getdatetimeinstance(intdatestyle,inttimestyle)来建立dateformat对象来显示时间和日期。这个方法表明你想要的日期和时间格式。如果你喜欢使用缺省格式,可以使用getdatetimeinstance()来代替它。你可以使用静态方法gettimeinstance(inttimestyle)创建dateformat对象来显示正确的时间。下面的程序示范了getdatetimeinstance()和gettimeinstance()怎样工作:importjava.util.*;importjava.text.*;publicclassapollo{publicstaticvoidmain(string[]args){gregoriancalendarliftoffapollo11=newgregoriancalendar(1969,calendar.july,16,9,32);dated=liftoffapollo11.gettime();dateformatdf1=dateformat.getdatetimeinstance(dateformat.medium,dateformat.medium);dateformatdf2=dateformat.gettimeinstance(dateformat.short);strings1=df1.format(d);strings2=df2.format(d);system.out.println(s1);system.out.println(s2);}}在我的电脑上,上面的程序显示如下:jul16,19699:32:00am9:32am(输出根据你所在得地区有所不同)计算时间间隔你可能有时需要计算过去的时间;例如,给你开始和结束时间,你想知道制造流程的持续时间。一个出租公司按小时或天数出租东西,计算时间对他们也很有用。同样的,在金融界,经常需要计算重要的支付时间。将问题复杂化,人类至少是用两种方法计算时间。你可以说一天已经结束当24小时过去了,或者日历从今天翻到明天。我们将讨论我们想到的这两种情况。时间段,情况1:严格时间单位在这种情况中,只有24小时过去,这天才过去,60分钟过去,这个小时才过去,60秒过去,这个分钟才过去,以此类推。在这个方法中,23小时的时间将被认为是0天。使用这种方法计算时间段,你从计算过去的毫秒开始。为了做到这一点,首先转换每个日期为从1970年1月1日起得毫秒数。你可以从第二个毫秒值中减去第一个毫秒值。这里有一个简单的计算:importjava.util.*;publicclasselapsedmillis{publicstaticvoidmain(string[]args){gregoriancalendargc1=newgregoriancalendar(1995,11,1,3,2,1);gregoriancalendargc2=newgregoriancalendar(1995,11,1,3,2,2);//theabovetwodatesareonesecondapartdated1=gc1.gettime();dated2=gc2.gettime();longl1=d1.gettime();longl2=d2.gettime();longdifference=l2-l1;system.out.println(elapsedmilliseconds:+difference);}}上面的程序打印如下:elapsedmilliseconds:1000这个程序也带来一点混淆。gregoriancalendar类的gettime()返回一个date对象,date类的gettime()方法返回从1970年1月1日到这个时间的long类型的毫秒数值。虽然他们的方法名字相同,返回值却不一样!下面的程序片断用简单的整数除法转换毫秒到秒:longmilliseconds=1999;longseconds=1999/1000;这种方法舍去小数部分转换毫秒到秒,所以1,999毫秒等于1秒,2,000毫秒等于2秒。计算更大的单位-例如天数,小时和分钟-给定一个时间数值,可以使用下面的过程:1.计算最大的单位,减去这个数值的秒数2.计算第二大单位,减去这个数值的秒数3.重复操作直到只剩下秒例如,如果你的时间的10,000秒,你想知道这个数值相应的是多少小时,多少分钟,多少秒,你从最大的单位开始:小时。10,000除以3600(一个小时的秒数)得到小时数。使用整数除法,答案是2小时(整数除法中小数舍去)计算剩下的秒数,10,000-(3,600x2)=2,800秒。所以你有2小时和2,800秒。将2,800秒转换成分钟,2,800除以60。使用整数除法,答案是46。2,800-(60x46)=40秒。最后答案是2小时,46分,40秒。下面的java程序使用上面的计算方法:importjava.util.*;publicclasselapsed1{publicvoidcalchms(inttimeinseconds){inthours,minutes,seconds;hours=timeinseconds/3600;timeinseconds=timeinseconds-(hours*3600);minutes=timeinseconds/60;timeinseconds=timeinseconds-(minutes*60);seconds=timeinseconds;system.out.println(hours+hour(s)+minutes+minute(s)+seconds+second(s));}publicstaticvoidmain(string[]args){elapsed1elap=newelapsed1();elap.calchms(10000);}}输出结果如下:2hour(s)46minute(s)40second(s)上面的程序甚至在时间少于一个小时也可以正确的计算小时数。例如,你用上面的程序计算1,000秒,输出入下:0hour(s)16minute(s)40second(s)举一个现实世界的例子,下面的程序计算阿波罗11飞到月球使用得时间:importjava.util.*;publicclasslunarlanding{publiclonggetelapsedseconds(gregoriancalendargc1,gregoriancalendargc2){dated1=gc1.gettime();dated2=gc2.gettime();longl1=d1.gettime();longl2=d2.gettime();longdifference=math.abs(l2-l1);returndifference/1000;}publicvoidcalchm(longtimeinseconds){longhours,minutes,seconds;hours=timeinseconds/3600;timeinseconds=timeinseconds-(hours*3600);minutes=timeinseconds/60;system.out.println(hours+hour(s)+minutes+minute(s));}publicstaticvoidmain(string[]args){gregoriancalendarlunarlanding=newgregoriancalendar(1969,calendar.july,20,16,17);gregoriancalendarlunardeparture=newgregoriancalendar(1969,calendar.july,21,13,54);gregoriancalendarstarteva=newgregoriancalendar(1969,calendar.july,20,22,56);gregoriancalendarendeva=newgregoriancalendar(1969,calendar.july,21,1,9);lunarlandingapollo=newlunarlanding();longeva=apollo.getelapsedseconds(starteva,endeva);system.out.print(evaduration=);apollo.calchm(eva);longlunarstay=apollo.getelapsedseconds(lunarlanding,lunardeparture);system.out.print(lunarstay=);apollo.calchm(lunarstay);}}上面程序输出如下:evaduration=2hour(s)13minute(s)lunarstay=21hour(s)37minute(s)目前为止,我们计算的基础公式是这样的:1分钟=60秒,1小时=60分,1天=24小时。1个月=?天,1年=?天怎么办?月份的天数有28,29,30,31;一年可以是365或366天。因此,当你试图计算严格单位的月份和年时,问题就产生了。例如,如果你使用月份的平均天数(近似30.4375),并且计算下面的时间间隔:*july1,2:00a.m.tojuly31,10:00p.m.*february1,2:00a.m.tofebruary29,10:00p.m.第一个计算结果是1个月;第二个结果是0个月!所以,在计算严格单位时间的月份和年份是要想好。时间段,
本文标题:java的时间处理(续计算java时间)
链接地址:https://www.777doc.com/doc-722873 .html