这个例子是想象的,但在一个日期上增加天数是一个普遍的操作:影碟可以租3天,图书馆可以借书21天,商店经常需要将购买的物品在30天内卖出。下面的程序演示了使用年计算:
importjava.util.*;
importjava.text.*;
publicclassMortgage{
publicstaticvoidmain(String[]args){
GregorianCalendarmortgage=newGregorianCalendar(1997,Calendar.MAY,18);
mortgage.add(Calendar.YEAR,15);
Dated=mortgage.getTime();
DateFormatdf=DateFormat.getDateInstance();
Strings=df.format(d);
System.out.println("15yearmortgageamortizedon"+s);}
}
add()一个重要的副作用是它改变的原来的日期。有时候,拥有原始日期和修改后的日期很重要。不幸的是,你不能简单的创建一个GregorianCalendar对象,设置它和原来的相等(equal)。原因是两个变量指向同一个Date()对象地址。如果Date对象改变,两个变量就指向改变后的日期对象。代替这种做法,应该创建一个新对象。下面的程序示范了这种做法:
importjava.util.*;
importjava.text.*;
publicclassThreeDates{
publicstaticvoidmain(String[]args){
GregorianCalendargc1=newGregorianCalendar(2000,Calendar.JANUARY,1);
GregorianCalendargc2=gc1;
GregorianCalendargc3=newGregorianCalendar(2000,Calendar.JANUARY,1);
//ThreedatesallequaltoJanuary1,2000
gc1.add(Calendar.YEAR,1);
file://gc1andgc2arechanged
DateFormatdf=DateFormat.getDateInstance();
Dated1=gc1.getTime();
Dated2=gc2.getTime();
Dated3=gc3.getTime();
Strings1=df.format(d1);
Strings2=df.format(d2);
Strings3=df.format(d3);
System.out.println("gc1is"+s1);
System.out.println("gc2is"+s2);
System.out.println("gc3is"+s3);
}
}
程序运行后,gc1和gc2被变成2001年(因为两个对象指向同一个Date,而Date已经被改变了)。对象gc3指向一个单独的Date,它没有被改变。
计算复习日期
在这节,你将看到一个依据现实世界的例子。这个详细的程序计算过去一个具体的日期。例如,你阅读这篇文章,你想要记住一个印象深刻的知识点。如果你没有照片一样的记忆力,你就要定期的复习这些新资料,这将帮助你记住它。关于复习系统,KurtHanks和GerreldL.Pulsipher在他们的中有讨论,建议看过第一眼后马上回顾一下,然后是1天后,1个星期后,1个月后,3个月后,1年后。我的这篇文章,你要马上回顾一下,从现在算起,再就是明天,然后是1个星期,1个月,3个月,1年后。我们的程序将计算这些日期。
这个程序非常有用的,它将是PIM(PersonalInformationManager个人信息管理器)的一个组成部分,并将确定复习时间。在下面的程序中,getDates()方法对一个返回日期数组(复习日期)的电子软件很有用。另外,你可以返回单独的一个日期,使用getFirstDay(),getOneDay(),getOneWeek(),getOnMonth()和getOneYear().当时间范围超出这个PIM的ReviewDates的计算范围时ReviewDates类演示了怎样计算时间段。现在,你可以容易的修改它用来处理你需要的时间段,象图书馆借书,录影带租赁和抵押计算。首先,ReviewDates类显示在下面:
importjava.util.*;
importjava.text.*;
publicclassReviewDates{
privateGregorianCalendarfirstDay,oneDay,oneWeek,oneMonth,oneQuarter,oneYear;
finalintdateArraySize=6;
ReviewDates(GregorianCalendargcDate){
intyear=gcDate.get(GregorianCalendar.YEAR);
intmonth=gcDate.get(GregorianCalendar.MONTH);
intdate=gcDate.get(GregorianCalendar.DATE);
firstDay=newGregorianCalendar(year,month,date);
oneDay=newGregorianCalendar(year,month,date);
oneWeek=newGregorianCalendar(year,month,date);
oneMonth=newGregorianCalendar(year,month,date);
oneQuarter=newGregorianCalendar(year,month,date);
oneYear=newGregorianCalendar(year,month,date);
oneDay.add(GregorianCalendar.DATE,1);
oneWeek.add(GregorianCalendar.DATE,7);
oneMonth.add(GregorianCalendar.MONTH,1);
oneQuarter.add(GregorianCalendar.MONTH,3);
oneYear.add(GregorianCalendar.YEAR,1);
}
ReviewDates(){
this(newGregorianCalendar());
}
publicvoidlistDates(){