⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 计算java日期--学习怎样创建和使用日期 .txt

📁 Java技巧与编程经验谈共32个文件
💻 TXT
📖 第 1 页 / 共 2 页
字号:
创建一个代表任意日期的一个途径使用GregorianCalendar类的构造函数,它包含在java.util包中:
GregorianCalendar(int year, int month, int date) 
注意月份的表示,一月是0,二月是1,以此类推,是12月是11。因为大多数人习惯于使用单词而不是使用数字来表示月份,这样程序也许更易读,父类Calendar使用常量来表示月份:JANUARY, FEBRUARY,等等。所以,创建Wilbur 和 Orville制造第一架动力飞机的日期(December 17, 1903),你可以使用:
GregorianCalendar firstFlight = new GregorianCalendar(1903, Calendar.DECEMBER, 17); 
出于清楚的考虑,你应该使用前面的形式。但是,你也应该学习怎样阅读下面的短格式。下面的例子同样表示December 17,1903(记住,在短格式中,11表示December)
GregorianCalendar firstFlight = new GregorianCalendar(1903, 11, 17);   
在上一节中,你学习了转换Date对象到字符串。这里,你可以做同样的事情;但是首先,你需要将GregorianCalendar对象转换到Date。要做到这一点,你可以使用getTime()方法,从它得父类Calendar继承而来。GetTime()方法返回GregorianCalendar相应的Date对象。你能够创建GregorianCalendar对象,转换到Date对象,得到和输出相应的字符串这样一个过程。下面是例子: 
import java.util.*;import java.text.*;public class Flight {   public static void main(String[] args) {      GregorianCalendar firstFlight = new GregorianCalendar(1903, Calendar.DECEMBER, 17);          Date d = firstFlight.getTime();      DateFormat df = DateFormat.getDateInstance();      String s = df.format(d);      System.out.println("First flight was " + s);   }}
有时候创建一个代表当前时刻的GregorianCalendar类的实例是很有用的。你可以简单的使用没有参数的GregorianCalendar构造函数,象这样:
GregorianCalendar thisday = new GregorianCalendar();
一个输出今天日期的例子程序,使用GregorianCalendar对象:
import java.util.*;import java.text.*;class Today {   public static void main(String[] args) {      GregorianCalendar thisday = new GregorianCalendar();       Date d = thisday.getTime();      DateFormat df = DateFormat.getDateInstance();      String s = df.format(d);      System.out.println("Today is " + s);   }}
注意到,Date()构造函数和GregorianCalendar()构造函数很类似:都创建一个对象,条件简单,代表今天。
日期处理
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中的日期问题,这篇文章只是冰山一角。可是,我在这里介绍的类和方法不仅仅是你学习高级技术的跳板,这些类和方法本身就可以处理很多通常的日期相关的任务

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -