扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
| 
 
 
 日期处理 
 GregorianCalendar类提供处理日期的方法。一个有用的方法是add().使用add()方法,你能够增加象年,月数,天数到日期对象中。要使用add()方法,你必须提供要增加的字段,要增加的数量。一些有用的字段是DATE, MONTH, YEAR, 和 WEEK_OF_YEAR。下面的程序使用add()方法计算未来80天的一个日期。在Jules的<环球80天>是一个重要的数字,使用这个程序可以计算Phileas Fogg从出发的那一天1872年10月2日后80天的日期: 
 import java.util.*; 
 import java.text.*; 
 public class World { 
 public static void main(String[] args) { 
 GregorianCalendar worldTour = new GregorianCalendar(1872, Calendar.OCTOBER, 2); 
 worldTour.add(GregorianCalendar.DATE, 80); 
 Date d = worldTour.getTime(); 
 DateFormat df = DateFormat.getDateInstance(); 
 String s = df.format(d); 
 System.out.println("80 day trip will end " + s); 
 } 
 } 
 
 这个例子是想象的,但在一个日期上增加天数是一个普遍的操作:影碟可以租3天,图书馆可以借书21天,商店经常需要将购买的物品在30天内卖出。下面的程序演示了使用年计算: 
 import java.util.*; 
 import java.text.*; 
 public class Mortgage { 
 public static void main(String[] args) { 
 GregorianCalendar mortgage = new GregorianCalendar(1997, Calendar.MAY, 18); 
 mortgage.add(Calendar.YEAR, 15); 
 Date d = mortgage.getTime(); 
 DateFormat df = DateFormat.getDateInstance(); 
 String s = df.format(d); 
 System.out.println("15 year mortgage amortized on " + s); } 
 } 
 
 add()一个重要的副作用是它改变的原来的日期。有时候,拥有原始日期和修改后的日期很重要。不幸的是,你不能简单的创建一个GregorianCalendar对象,设置它和原来的相等(equal)。原因是两个变量指向同一个Date()对象地址。如果Date对象改变,两个变量就指向改变后的日期对象。代替这种做法,应该创建一个新对象。下面的程序示范了这种做法: 
 import java.util.*; 
 import java.text.*; 
 public class ThreeDates { 
 public static void main(String[] args) { 
 GregorianCalendar gc1 = new GregorianCalendar(2000, Calendar.JANUARY, 1); 
 GregorianCalendar gc2 = gc1; 
 GregorianCalendar gc3 = new GregorianCalendar(2000, Calendar.JANUARY, 1); 
 //Three dates all equal to January 1, 2000 
 gc1.add(Calendar.YEAR, 1); 
 file://gc1 and gc2 are changed 
 DateFormat df = DateFormat.getDateInstance(); 
 Date d1 = gc1.getTime(); 
 Date d2 = gc2.getTime(); 
 Date d3 = gc3.getTime(); 
 String s1 = df.format(d1); 
 String s2 = df.format(d2); 
 String s3 = df.format(d3); 
 System.out.println("gc1 is " + s1); 
 System.out.println("gc2 is " + s2); 
 System.out.println("gc3 is " + s3); 
 } 
 } 
 
 程序运行后,gc1和gc2被变成2001年(因为两个对象指向同一个Date,而Date已经被改变了)。对象gc3指向一个单独的Date,它没有被改变。 
 计算复习日期 
 在这节,你将看到一个依据现实世界的例子。这个详细的程序计算过去一个具体的日期。例如,你阅读这篇文章,你想要记住一个印象深刻的知识点。如果你没有照片一样的记忆力,你就要定期的复习这些新资料,这将帮助你记住它。关于复习系统,Kurt Hanks 和 Gerreld L. Pulsipher在他们的< Five Secrets to Personal Productivity个人能力的5个秘密>中有讨论,建议看过第一眼后马上回顾一下,然后是1天后,1个星期后,1个月后,3个月后,1年后。我的这篇文章,你要马上回顾一下,从现在算起,再就是明天,然后是1个星期,1个月,3个月,1年后。我们的程序将计算这些日期。 
 这个程序非常有用的,它将是PIM(Personal Information Manager个人信息管理器)的一个组成部分,并将确定复习时间。在下面的程序中,getDates()方法对一个返回日期数组(复习日期)的电子软件很有用。另外,你可以返回单独的一个日期,使用getFirstDay(),getOneDay(),getOneWeek(),getOnMonth()和getOneYear().当时间范围超出这个PIM的ReviewDates的计算范围时ReviewDates类演示了怎样计算时间段。现在,你可以容易的修改它用来处理你需要的时间段,象图书馆借书,录影带租赁和抵押计算。首先,ReviewDates类显示在下面: 
 import java.util.*; 
 import java.text.*; 
 public class ReviewDates { 
 private GregorianCalendar firstDay, oneDay, oneWeek, oneMonth, oneQuarter, oneYear; 
 final int dateArraySize = 6; 
 ReviewDates(GregorianCalendar gcDate) { 
 int year = gcDate.get(GregorianCalendar.YEAR); 
 int month = gcDate.get(GregorianCalendar.MONTH); 
 int date = gcDate.get(GregorianCalendar.DATE); 
 firstDay = new GregorianCalendar(year, month, date); 
 oneDay = new GregorianCalendar(year, month, date); 
 oneWeek = new GregorianCalendar(year, month, date); 
 oneMonth = new GregorianCalendar(year, month, date); 
 oneQuarter = new GregorianCalendar(year, month, date); 
 oneYear = new GregorianCalendar(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(new GregorianCalendar()); 
 } 
 public void listDates() { 
 DateFormat df = DateFormat.getDateInstance(DateFormat.LONG); 
 Date startDate = firstDay.getTime(); 
 Date date1 = oneDay.getTime(); 
 Date date2 = oneWeek.getTime(); 
 Date date3 = oneMonth.getTime(); 
 Date date4 = oneQuarter.getTime(); 
 Date date5 = oneYear.getTime(); 
 String ss = df.format(startDate); 
 String ss1 = df.format(date1); 
 String ss2 = df.format(date2); 
 String ss3 = df.format(date3); 
 String ss4 = df.format(date4); 
 String ss5 = df.format(date5); 
 System.out.println("Start date is " + ss); 
 System.out.println("Following review dates are:"); 
 System.out.println(ss1); 
 System.out.println(ss2); 
 System.out.println(ss3); 
 System.out.println(ss4); 
 System.out.println(ss5); 
 System.out.println(); 
 } 
 public GregorianCalendar[] getDates() { 
 GregorianCalendar[] memoryDates = new GregorianCalendar[dateArraySize]; 
 memoryDates[0] = firstDay; 
 memoryDates[1] = oneDay; 
 memoryDates[2] = oneWeek; 
 memoryDates[3] = oneMonth; 
 memoryDates[4] = oneQuarter; 
 memoryDates[5] = oneYear; 
 return memoryDates; 
 } 
 public GregorianCalendar getFirstDay() { 
 return this.firstDay; 
 } 
 public GregorianCalendar getOneDay() { 
 return this.oneDay; 
 } 
 public GregorianCalendar getOneWeek() { 
 return this.oneWeek; 
 } 
 public GregorianCalendar getOneMonth() { 
 return this.oneMonth; 
 } 
 public GregorianCalendar getOneQuarter() { 
 return this.oneQuarter; 
 } 
 public GregorianCalendar getOneYear() { 
 return this.oneYear; 
 } 
 } 
 
 下面是使用ReviewDates类列出复习日期的例子程序: 
 import java.util.*; 
 public class ShowDates { 
 public static void main(String[] args) { 
 ReviewDates rd = new ReviewDates(); 
 rd.listDates(); 
 GregorianCalendar gc = new GregorianCalendar(2001, Calendar.JANUARY, 15); 
 ReviewDates jan15 = new ReviewDates(gc); 
 jan15.listDates(); 
 } 
 } 
 
 总结 
 这篇文章介绍了关于日期处理的3个重要的类:Date,DateFormat,GregorianCalendar.这些类让你创建日期,转换成字符串,和计算日期基本元素。处理Java中的日期问题,这篇文章只是冰山一角。可是,我在这里介绍的类和方法不仅仅是你学习高级技术的跳板,这些类和方法本身就可以处理很多通常的日期相关的任务   | 
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。