Java中一些关于日期、日期格式、日期的解析和日期的计算

2009-04-24 14:19

Java中一些关于日期、日期格式、日期的解析和日期的计算

Java 语言的Calendar(日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象. 我们写了两篇文章, 这是第一篇, 我们将大概的学习日期, 日期格式, 日期的解析和日期的计算.

我们将讨论下面的类:

1、具体类(和抽象类相对)java.util.Date

2、抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat

3、抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar

具体类可以被实例化, 但是抽象类却不能. 你首先必须实现抽象类的一个具体子类.

Date 类从Java 开发包(JDK) 1.0 就开始进化, 当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了, 我们将在本文中进一步讨论它. 这种改进旨在更好的处理日期数据的国际化格式. 就象在JDK 1.1中一样, Date 类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970年, 1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数.

一、创建一个日期对象

让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子. 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间.

//------------------------------------------------------

import java.util.Date;

public class DateExample1

{

public static void main(String[] args)

{

// Get the system date/time

Date date = new Date();

System.out.println(date.getTime());

}

}

//------------------------------------------------------

在星期六, 2001年9月29日, 下午大约是6:50的样子, 上面的例子在系统输出设备上显示的结果是 1001803809710. 在这个例子中,值得注意的是我们使用了Date 构造函数创建一个日期对象, 这个构造函数没有接受任何参数. 而这个构造函数在内部使用了System.currentTimeMillis() 方法来从系统获取日期.

那么, 现在我们已经知道了如何获取从1970年1月1日开始经历的毫秒数了. 我们如何才能以一种用户明白的格式来显示这个日期呢? 在这里类java.text.SimpleDateFormat 和它的抽象基类 java.text.DateFormat 就派得上用场了.

二、日期数据的定制格式

假如我们希望定制日期数据的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成这个工作:

//------------------------------------------------------

import java.text.SimpleDateFormat;

import java.util.Date;

public class DateExample2

{

public static void main(String[] args)

{

SimpleDateFormat bartDateFormat =

new SimpleDateFormat("EEEE-MMMM-dd-yyyy");

Date date = new Date();

System.out.println(bartDateFormat.format(date));

}

}

//------------------------------------------------------

只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy", 我们就能够指明自己想要的格式. 你应该可以看见, 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化的.传递"EE-MM-dd-yy"会显示 Sat-09-29-01. 请察看Sun 公司的Web 站点获取日期格式化选项的完整的指示.

三、将文本数据解析成日期对象

假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个字符串并从文本日期数据创建一个日期对象. 我们将再次以格式化字符串"MM-dd-yyyy" 调用SimpleDateFormat类, 但是这一次, 我们使用格式化解析而不是生成一个文本日期数据. 我们的例子, 显示在下面, 将解析文本字符串"9-29-2001"并创建一个值为001736000000 的日期对象.

//------------------------------------------------------

import java.text.SimpleDateFormat;

import java.util.Date;

public class DateExample3

{

public static void main(String[] args)

{

// Create a date formatter that can parse dates of

// the form MM-dd-yyyy.

SimpleDateFormat bartDateFormat =

new SimpleDateFormat("MM-dd-yyyy");

// Create a string containing a text date to be parsed.

String dateStringToParse = "9-29-2001";

try {

// Parse the text version of the date.

// We have to perform the parse method in a

// try-catch construct in case dateStringToParse

// does not contain a date in the format we are expecting.

Date date = bartDateFormat.parse(dateStringToParse);

// Now send the parsed date as a long value

// to the system output.

System.out.println(date.getTime());

}

catch (Exception ex) {

System.out.println(ex.getMessage());

}

}

}

//------------------------------------------------------

四、使用标准的日期格式化过程

既然我们已经可以生成和解析定制的日期格式了, 让我们来看一看如何使用内建的格式化过程. 方法 DateFormat.getDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过程. 在下面的例子中, 我们获取了四个内建的日期格式化过程. 它们包括一个短的, 中等的, 长的, 和完整的日期格式.

//------------------------------------------------------

import java.text.DateFormat;

import java.util.Date;

public class DateExample4

{

public static void main(String[] args)

{

Date date = new Date();

DateFormat shortDateFormat =

DateFormat.getDateTimeInstance(

DateFormat.SHORT,

DateFormat.SHORT);

DateFormat mediumDateFormat =

DateFormat.getDateTimeInstance(

DateFormat.MEDIUM,

DateFormat.MEDIUM);

DateFormat longDateFormat =

DateFormat.getDateTimeInstance(

DateFormat.LONG,

DateFormat.LONG);

DateFormat fullDateFormat =

DateFormat.getDateTimeInstance(

DateFormat.FULL,

DateFormat.FULL);

System.out.println(shortDateFormat.format(date));

System.out.println(mediumDateFormat.format(date));

System.out.println(longDateFormat.format(date));

System.out.println(fullDateFormat.format(date));

}

}

//------------------------------------------------------

注意我们在对 getDateTimeInstance的每次调用中都传递了两个值. 第一个参数是日期风格, 而第二个参数是时间风格. 它们都是基本数据类型int(整型). 考虑到可读性, 我们使用了DateFormat 类提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道获取时间和日期格式化过程的更多的方法和选项, 请看Sun 公司Web 站点上的解释.

运行我们的例子程序的时候, 它将向标准输出设备输出下面的内容:

9/29/01 8:44 PM

Sep 29, 2001 8:44:45 PM

September 29, 2001 8:44:45 PM EDT

Saturday, September 29, 2001 8:44:45 PM EDT

五、Calendar 类

我们现在已经能够格式化并创建一个日期对象了, 但是我们如何才能设置和获取日期数据的特定部分呢, 比如说小时, 日, 或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类. 就如我们前面提到的那样, Calendar 类中的方法替代了Date 类中被人唾骂的方法.

假设你想要设置, 获取, 和操纵一个日期对象的各个部分, 比方一个月的一天或者是一个星期的一天. 为了演示这个过程, 我们将使用具体的子类 java.util.GregorianCalendar. 考虑下面的例子, 它计算得到下面的第十个星期五是13号.

//------------------------------------------------------

import java.util.GregorianCalendar;

import java.util.Date;

import java.text.DateFormat;

public class DateExample5

{

public static void main(String[] args)

{

DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);

// Create our Gregorian Calendar.

GregorianCalendar cal = new GregorianCalendar();



// Set the date and time of our calendar

// to the system&s date and time

cal.setTime(new Date());

System.out.println("System Date: " +

dateFormat.format(cal.getTime()));

// Set the day of week to FRIDAY

cal.set(GregorianCalendar.DAY_OF_WEEK,

GregorianCalendar.FRIDAY);

System.out.println("After Setting Day of Week to Friday: " +

dateFormat.format(cal.getTime()));

int friday13Counter = 0;



while (friday13Counter <= 10)

{

// Go to the next Friday by adding 7 days.

cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

// If the day of month is 13 we have

// another Friday the 13th.

if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13)

{

friday13Counter++;

System.out.println(dateFormat.format(cal.getTime()));

}

}

}

}

//------------------------------------------------------

在这个例子中我们作了有趣的函数调用:

cal.set(GregorianCalendar.DAY_OF_WEEK,

GregorianCalendar.FRIDAY);

和:

cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

set 方法能够让我们通过简单的设置星期中的哪一天这个域来将我们的时间调整为星期五. 注意到这里我们使用了常量 DAY_OF_WEEK 和 FRIDAY来增强代码的可读性. add 方法让我们能够在日期上加上数值. 润年的所有复杂的计算都由这个方法自动处理.

我们这个例子的输出结果是:

System Date: Saturday, September 29, 2001

当我们将它设置成星期五以后就成了: Friday, September 28, 2001

Friday, September 13, 2002

Friday, December 13, 2002

Friday, June 13, 2003

Friday, February 13, 2004

Friday, August 13, 2004

Friday, May 13, 2005

Friday, January 13, 2006

Friday, October 13, 2006

Friday, April 13, 2007

Friday, July 13, 2007

Friday, June 13, 2008

计算Java日期

学习怎样创建和使用日期

概要

不管你是处理财务交易还是计划着下一步的行动,你都要知道怎样在Java中建立,使用和显示日期。这需要你简单的查阅一下相应类的API参考:一个日期可以创建3个相关类的对象。这篇文章告诉你你想要知道的内容。(3,000字)

作者:Robert Nielsen

翻译:Cocia Lin

Java统计从1970年1月1日起的毫秒的数量表示日期。也就是说,例如,1970年1月2日,是在1月1日后的86,400,000毫秒。同样的,1969年12月31日是在1970年1月1日前86,400,000毫秒。Java的Date类使用long类型纪录这些毫秒值.因为long是有符号整数,所以日期可以在1970年1月1日之前,也可以在这之后。Long类型表示的最大正值和最大负值可以轻松的表示290,000,000年的时间,这适合大多数人的时间要求。

Date 类

Date类可以在java.util包中找到,用一个long类型的值表示一个指定的时刻。它的一个有用的构造函数是Date(),它创建一个表示创建时刻的对象。getTime()方法返回Date对象的long值。在下面的程序中,我使用Date()构造函数创建一个表示程序运行时刻的对象,并且利用getTime()方法找到这个日期代表的毫秒数量:

import java.util.*;



public class Now {

public static void main(String[] args) {

Date now = new Date();

long nowLong = now.getTime();

System.out.println("Value is " + nowLong);

}

}



当我运行这个程序后,我得到972,568,255,150.快速确认一下这个数字,起码在一个合理的范围:它不到31年,这个数值相对1970年1月1日到我写这篇文章的时间来说,是合理的。计算机是这个毫秒值表示时间,人们可不愿意说" 我将在996,321,998,34见到你。"幸运的是,Java提供了一个转换Date对象到字符串的途径,表示成传统的形式。我们在下一节讨论DateFormat类,它直观的建立日期字符串。

DateFormat类

DateFormat类的一个目标是建立一个人们能够识别的字符串。然而,因为语言的差别,不是所有的人希望看到严格的相同格式的日期。法国人更喜欢看到"25 decembre 2000,",但是美国人习惯看到"December 25,2000."所以一个DateFormat的实例创建以后,这个对象包含了日期的显示格式的信息。如果使用用户电脑区域设置缺省的格式,你可以象下面那样,创建DateFormat对象,使用getDateInstance()方法:

DateFormat df = DateFormat.getDateInstance();



DateFormat类在java.text包中可以找到。

转换成字符串

你可以使用format()方法转换Date对象为一个字符串。下面的示例程序说明了这个问题:

import java.util.*;

import java.text.*;

public class NowString {

public static void main(String[] args) {

Date now = new Date();

DateFormat df = DateFormat.getDateInstance();

String s = df.format(now);

System.out.println("Today is " + s);

}

}



在上面的代码中,展示了没有参数,使用缺省格式的getDateInstance()方法。Java还提供了几个选择日期格式,你可以通过使用重载的getDateInstance(int style)获得。出于方便的原因,DateFormat提供了几种预置的常量,你可以使用这些常量参数。下面是几个SHORT, MEDIUM, LONG, 和FULL类型的示例:

import java.util.*;

import java.text.*;

public class StyleDemo {

public static void main(String[] args) {

Date now = new Date();

DateFormat df = DateFormat.getDateInstance();

DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT);

DateFormat df2 = DateFormat.getDateInstance(DateFormat.MEDIUM);

DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG);

DateFormat df4 = DateFormat.getDateInstance(DateFormat.FULL);

String s = df.format(now);

String s1 = df1.format(now);

String s2 = df2.format(now);

String s3 = df3.format(now);

String s4 = df4.format(now);

System.out.println("(Default) Today is " + s);

System.out.println("(SHORT) Today is " + s1);

System.out.println("(MEDIUM) Today is " + s2);

System.out.println("(LONG) Today is " + s3);

System.out.println("(FULL) Today is " + s4);

}

}



程序输出如下:

(Default) Today is Nov 8, 2000

(SHORT) Today is 11/8/00

(MEDIUM) Today is Nov 8, 2000

(LONG) Today is November 8, 2000

(FULL) Today is Wednesday, November 8, 2000



同样的程序,在我的电脑上使用缺省设置运行后,改变区域设置为瑞典,输出如下:

(Default) Today is 2000-nov-08

(SHORT) Today is 2000-11-08

(MEDIUM) Today is 2000-nov-08

(LONG) Today is den 8 november 2000

(FULL) Today is den 8 november 2000



从这里,你能看到,瑞典的月份不是大写的(虽然November还是november).还有,LONG和FULL版本在瑞典语中是一样的,但是美国英语却不同。另外,有趣的是,瑞典语单词的星期三,onsdag,没有包含在FULL日期里,英语却包括。

注意你能够使用getDateInstance()方法改变DateFormat实例的语种;但是,在上面的例子中,是通过改变Windows98的控制面板的区域设置做到的。不同的地方的区域设置不同,结果就不同,这样有好处,也有不足,Java程序员应该了解这些。一个好处是Java程序员可以只写一行代码就可以显示日期,而且世界不同地区的电脑运行同样的程序会有不用的日期格式。 但是这也是一个缺点,当程序员希望显示同一种格式的时--这也有可取之处,举例来说,在程序中混合输出文本和日期,如果文本是英文,我们就不希望日期格式是其他的格式,象德文或是西班牙文。如果程序员依靠日期格式编程,日期格式将根据运行程序所在电脑的区域设置不用而不同。

解析字符串

通过parse()方法,DateFormat能够以一个字符串创立一个Date对象。这个方法能抛出ParseException异常,所以你必须使用适当的异常处理技术。下面的例子程序通过字符串创建Date对象:

import java.util.*;

import java.text.*;

public class ParseExample {

public static void main(String[] args) {

String ds = "November 1, 2000";

DateFormat df = DateFormat.getDateInstance();

try {

Date d = df.parse(ds);

}

catch(ParseException e) {

System.out.println("Unable to parse " + ds);

}

}

}



在创建一个任意的日期时parse()方法很有用。我将通过另一种方法创建一个任意得日期。同时,你将看到怎样进行基本日期计算,例如计算90天后的另一天。你可以使用GregorianCalendar类来完成这个任务。

GregorianCalendar类

创建一个代表任意日期的一个途径使用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中的日期问题,这篇文章只是冰山一角。可是,我在这里介绍的类和方法不仅仅是你学习高级技术的跳板,这些类和方法本身就可以处理很多通常的日期相关的任务


猜你喜欢

转载自blog.csdn.net/zxl0016/article/details/7483965