Java的时间处理续计算Java时间Word下载.docx

上传人:b****5 文档编号:16478293 上传时间:2022-11-24 格式:DOCX 页数:7 大小:20.19KB
下载 相关 举报
Java的时间处理续计算Java时间Word下载.docx_第1页
第1页 / 共7页
Java的时间处理续计算Java时间Word下载.docx_第2页
第2页 / 共7页
Java的时间处理续计算Java时间Word下载.docx_第3页
第3页 / 共7页
Java的时间处理续计算Java时间Word下载.docx_第4页
第4页 / 共7页
Java的时间处理续计算Java时间Word下载.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

Java的时间处理续计算Java时间Word下载.docx

《Java的时间处理续计算Java时间Word下载.docx》由会员分享,可在线阅读,更多相关《Java的时间处理续计算Java时间Word下载.docx(7页珍藏版)》请在冰豆网上搜索。

Java的时间处理续计算Java时间Word下载.docx

反过来,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:

00AM

9:

32AM

(输出根据你所在得地区有所不同

计算时间间隔

你可能有时需要计算过去的时间;

例如,给你开始和结束时间,你想知道制造流程的持续时间。

一个出租公司按小时或天数出租东西,计算时间对他们也很有用。

同样的,在金融界,经常需要计算重要的支付时间。

将问题复杂化,人类至少是用两种方法计算时间。

你可以说一天已经结束当24小时过去了,或者日历从今天翻到明天。

我们将讨论我们想到的这两种情况。

时间段,情况1:

严格时间单位

在这种情况中,只有24小时过去,这天才过去,60分钟过去,这个小时才过去,60秒过去,这个分钟才过去,以此类推。

在这个方法中,23小时的时间将被认为是0天。

使用这种方法计算时间段,你从计算过去的毫秒开始。

为了做到这一点,首先转换每个日期为从1970年1月1日起得毫秒数。

你可以从第二个毫秒值中减去第一个毫秒值。

这里有一个简单的计算:

publicclassElapsedMillis{

GregorianCalendargc1=newGregorianCalendar(1995,11,1,3,2,1;

GregorianCalendargc2=newGregorianCalendar(1995,11,1,3,2,2;

//theabovetwodatesareonesecondapart

Dated1=gc1.getTime(;

Dated2=gc2.getTime(;

longl1=d1.getTime(;

longl2=d2.getTime(;

longdifference=l2-l1;

System.out.println("

Elapsedmilliseconds:

"

+difference;

上面的程序打印如下:

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程序使用上面的计算方法:

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"

;

Elapsed1elap=newElapsed1(;

elap.calcHMS(10000;

输出结果如下:

2hour(s46minute(s40second(s

上面的程序甚至在时间少于一个小时也可以正确的计算小时数。

例如,你用上面的程序计算1,000秒,输出入下:

0hour(s16minute(s40second(s

举一个现实世界的例子,下面的程序计算阿波罗11飞到月球使用得时间:

publicclassLunarLanding{

publiclonggetElapsedSeconds(GregorianCalendargc1,GregorianCalendargc2{Dated1=gc1.getTime(;

longdifference=Math.abs(l2-l1;

returndifference/1000;

publicvoidcalcHM(longtimeInSeconds{

longhours,minutes,seconds;

minute(s"

;

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;

Lunarstay="

apollo.calcHM(lunarStay;

上面程序输出如下:

EVAduration=2hour(s13minute(s

Lunarstay=21hour(s37minute(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:

第一个计算结果是1个月;

第二个结果是0个月!

所以,在计算严格单位时间的月份和年份是要想好。

时间段,情况2:

时间单位变化

时间单位的变化相当的简单:

如果你要统计天数,你可以简单的统计日期变化次数。

例如,如果某事15日开始,17日结束,经过2天。

(日期先是便到16,再到17同样的,一个步骤下午3:

25开始,4:

10p.m结束,历时1个小时,因为小时数值变了一次(从3到4。

图书馆经常使用这种习惯计算时间。

例如,如果你从图书馆接一本书,我不能占有这本书最少24小时,会认为图书馆这样才给你算一天。

而是,我的账号上记录我借书的日期。

日期以变成下一天,我就已经结这本书一天了,即使总计不足24小时。

当使用单位的变化来计算时间段,通常感觉计算的时间没有多于一个时间单位。

例如,如果9:

00p.m.我借了一本图书馆的书,第二天中午还回去,我能算出我借了这本书一天了。

可是,

有一种感觉在问:

1天和几个小时呢?

这本说总计借出15个小时,答案是一天还差9个小时呢?

因此,这篇文章里,我将以一个时间单位变化计算时间。

单位变化的时间算法这是你怎样计算两个日期的时间变化:

1.制作两个日期的拷贝。

Close(方法能制作拷贝。

2.使用日期拷贝,将所有的小于时间单位变化的部分设置成它的最小单位。

例如,如果计算天数,那么将小时,分钟,秒和毫秒设置成0。

这种情况中,使用clear(方法将时间值设置称他们各自的最小值。

3.取出较早的日期,将你要计算的单位加1,重复直到两个日期相等。

你加1的次数就是答案。

可以使用before(和after(方法,他们返回boolean值,来判断是否一个日期在另一个日期之前或之后。

下面的类的方法用来计算天数和月数。

importjava.util.*;

publicclassElapsedTime{publicintgetDays(GregorianCalendarg1,GregorianCalendarg2{intelapsed=0;

GregorianCalendargc1,gc2;

if(g2.after(g1{gc2=(GregorianCalendarg2.clone(;

gc1=(GregorianCalendarg1.clone(;

}else{gc2=(GregorianCalendarg1.clone(;

gc1=(GregorianCalendarg2.clone(;

}gc1.clear(Calendar.MILLISECOND;

gc1.clear(Calendar.SECOND;

gc1.clear(Calendar.MINUTE;

gc1.clear(Calendar.HOUR_OF_DAY;

gc2.clear(Calendar.MILLISECOND;

gc2.clear(Calendar.SECOND;

gc2.clear(Calendar.MINUTE;

gc2.clear(Calendar.HOUR_OF_DAY;

while(gc1.before(gc2{gc1.add(Calendar.DATE,1;

elapsed++;

}

returnelapsed;

}publicintgetMonths(GregorianCalendarg1,GregorianCalendarg2{intelapsed=0;

gc1.clear(Calendar.DATE;

gc2.clear(Calendar.DATE;

while(gc1.before(gc2{gc1.add(Calendar.MONTH,1;

}returnelapsed;

}}你可以在上面的类中补充另外的方法来处理小时和分钟。

同样,计算时间段的算法能更高效一些,尤其是时间相隔很长。

可是,作为介绍目的,这个算法有短小和简单的优势。

下面的例子使用ElapsedTime类来计算两个日期之间的天使,而后是月数:

publicclassExample{publicstaticvoidmain(String[]args{

GregorianCalendargc1=newGregorianCalendar(2001,Calendar.DECEMBER,30;

GregorianCalendargc2=newGregorianCalendar(2002,Calendar.FEBRUARY,1;

ElapsedTimeet=newElapsedTime(;

intdays=et.getDays(gc1,gc2;

intmonths=et.getMonths(gc1,gc2;

System.out.println("

Days="

+days;

Months="

+months;

}}当计算时,上面的程序可能有用,例如,最近的航班。

它显示下面的输出:

Days=33Months=2(OK,关于航班的计算有些夸张;

这个天数算法很适合像图书馆借书这样的应用,你看到了她怎样工作告诫在进行时间工作时要谨慎:

你看到的时间段的例子,你精确仔细的考虑非常重要。

本文介绍了两种通常计算时间段的想法,但是人们能想到的时间段的计算方法仅仅受到人类想象力的限制。

所以,当写一个Java程序的时候,确信你的精确度能让使用和以来这些程序的人满意。

同样,彻底的测试程序对处理时间的程序非重重要。

总结本文是在我的前一篇文章Java时间计算介绍怎样使用GregorianCalendar和DateFormat类处理时间问题的基础上的。

你已经看到了两种方法来思考时间段问题和两种相应的途径使用Java来处理时间问题。

这里提供的信息,很基础,提供给你一个在Java中处理时间问题的有力工具。

关于作者RobertNielsen是SCJP。

他拥有硕士学位,专攻计算机教育,并且在计算机领域执教多年。

他也在各样的杂志上发表过很多计算机相关的文章。

关于译者CociaLin(cocia@是程序员。

它拥有学士学位,现在专攻Java相关技术,刚刚开始在计算机领域折腾。

本文来自CSDN博客,转载请标明出处:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1