赛迪网 > IT技术 Java > Java读书频道-中
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

java.util第2部分:更多的实用工具类 (2)

发布时间:2006.06.12 03:15     来源:清华大学出版社    作者:Herbert Schildt 著 张玉清 吴溥峰等 译

16.3 Date(日期)

Date类封装当前的日期和时间。在开始检验Date类之前,需要着重强调的是:这里讨论的Date类与其在Java 1.0中所定义的原始版本相比,已经发生了本质上的改变。在Java 1.1公布的时候,许多原来由原始Date类执行的函数功能被移入到CalendarDateFormat类中,这样做的结果就导致许多最初1.0中的Date方法被摈弃。在Java 2中对时间和日期类增加了几个新的方法,但是以与Java 1.1中相同的形式来实现它们。由于被摈弃的Java 1.0中的方法不被新的程序所使用,这里就不讨论它们了。Date支持下面的构造函数:

Date( )

Date(long millisec)

第一种形式的构造函数用当前的日期和时间初始化对象。第二种形式的构造函数接收一个参数,该参数等于从197011日午夜起至今的毫秒数的大小。由Date类定义的未被摈弃的方法列在表16-3中。随着Java 2的出现,Date也实现了Comparable接口。

16-3 Date 定义的未被摈弃的方法

方法 描述

boolean after(Date date) 如果调用Date对象所包含的日期迟于由date指定的日期,则返回true;否则返回false

boolean before(Date date) 如果调用Date对象所包含的日期早于由date指定的日期,则返回true;否则返回false

Object clone( ) 复制调用Date对象

int compareTo(Date date) 将调用对象的值与date的值进行比较。如果这两者数值相等,则返回0;如果调用对象的值早于date的值,则返回一个负值;如果调用对象的值晚于date的值,则返回一个正值(在Java 2中新增加的)int compareTo(Object obj) 如果obj属于类Date,其操作与compareTo(Date)相同;否则,引发一个ClassCastException异常(在Java 2中新增加的)

boolean equals(Object date) 如果调用Date对象包含的时间和日期与由date指定的时间和日期相同,则返回true;否则,返回false

long getTime( ) 返回自197011起至今的毫秒数的大小

int hashCode( ) 返回调用对象的散列值

void setTime(long time) time的指定,设置时间和日期,表示自197011午夜至今的以毫秒为单位的时间值

String toString( ) 将调用Date对象转换成字符串并且返回结果

正如从表16-3中看到的那样,Date功能部件不允许单独获得日期或时间分量。通过下面的程序可以看到,仅能获得以毫秒为单位的日期和时间或通过调用toString( )方法来获得其默认的字符串表达式。为了获得关于日期和时间的更加详细的信息,可以使用Calendar类。

// Show date and time using only Date methods.

import java.util.Date;

class DateDemo {

public static void main(String args[]) {

// Instantiate a Date object

Date date = new Date();

// display time and date using toString()

System.out.println(date);

// Display number of milliseconds since midnight, January 1, 1970 GMT

long msec = date.getTime();

System.out.println("Milliseconds since Jan. 1, 1970 GMT = " + msec);

}

}

程序的输出如下所示:

Thu Jan 25 15:06:40 CST 2001

Milliseconds since Jan. 1, 1970 GMT = 980456763420

16.3.1 比较日期

有三种方法可用于比较两个Date对象。首先,可以对两个对象使用getTime( )方法获得它们各自自197011日午夜起至今的毫秒数的大小。然后比较这两个值的大小。其次,可以使用before( )after( )以及equals( )方法。例如,由于每个月的12号出现在18号之前,所以new Date(99, 2, 12).before(new Date (99, 2, 18))将返回true。最后,可以使用由Comparable接口定义,被Date实现的compareTo( )方法。

16.4 Calendar(日历)

抽象Calendar类提供了一组方法,这些方法允许将以毫秒为单位的时间转换为一组有用的分量。一些可以提供信息的类型是:年,月,日,小时,分和秒。Calendar的子类能提供特定的功能,以便按照它们本身的规则去解释时间信息,这是能够写出在几个国际环境下都能运行的程序的Java类库的一个方面。这种子类的一个例子是GregorianCalendarCalendar提供非公共的构造函数。Calendar定义了几个受保护的实例变量。areFieldsSet是一个指示时间分量是否已经建立的boolean型变量。fields是一个包含了时间分量的ints数组。isSet是一个指示特定时间分量是否已经建立的boolean数组。time是一个包含了该对象的当前时间的long型变量。isTimeSet是一个指示当前时间是否已经建立的boolean型变量。由Calendar定义的一些常用的方法列在表16-4中。

16-4 Calendar 定义的常见方法

方法 描述

abstract void add(int which, int val) val加到由which指定的时间或日期分量。为了实现减功能,可以加一个负数。which必须是由Calendar定义的域之一,例如

Calendar.HOUR

boolean after(Object calendarObj) 如果调用Calendar对象所包含的日期晚于由calendarObj指定的日期,则返回true;否则,返回false

boolean before(Object calendarObj) 如果调用Calendar对象所包含的日期早于由calendarObj指定的日期,则返回true;否则返回false

final void clear( ) 对调用对象的所有时间分量置0

final void clear(int which) 在调用对象中,对由which指定的时间分量置0

Object clone( ) 返回对调用对象的复制

Boolean equals(Object calendarObj) 如果调用Calendar对象所包含的日期与由calendarObj指定的日期相等,则返回true;否则返回false

final int get(int calendarField) 返回调用对象的一个分量的值。该分量由calendarField指定。可以被请求的分量的示例有:Calendar.YEARCalendar.MONTH

Calendar.MINUTE等等

续表

方法 描述

static Locale[ ] getAvailableLocales( ) 返回一个Locale对象的数组,其中包含了可以使用日历的地区

static Calendar getInstance( ) 对默认的地区和时区,返回一个Calendar对象

static Calendar getInstance(

Locale locale)

对由locale指定的地区,返回一个Calendar对象,而时区使用默认的时区

static Calendar getInstance(TimeZone

tz,Locale locale)

对由tz指定的时区,同时由locale指定的地区返回一个Calendar对象

final Date getTime( ) 返回一个与调用对象的时间相等的Date对象

TimeZone getTimeZone( ) 返回调用对象的时区

final boolean isSet(int which) 如果指定的时间分量被设置,则返回true;否则返回false

final void set(int which, int val) 在调用对象中,将由which指定的日期和时间分量赋给由val指定的值。Which 必须是由Calendar 定义的域之一。例如

Calendar.HOUR

final void set(int year, int month,

int dayOfMonth)

设置调用对象的各种日期和时间分量

final void set(int year, int month,

int dayOfMonth, int hours,

int minutes)

设置调用对象的各种日期和时间分量

final void set(int year, int month,

int dayOfMonth, int hours,

int minutes, int seconds)

设置调用对象的各种日期和时间分量

final void setTime(Date d) 设置调用对象的各种日期和时间分量。该信息从Date对象d中获

void setTimeZone(TimeZone tz) 将调用对象的时区设置为由tz指定的时区

Calendar定义了下面的int常数。这些常数用于得到或设置日历分量:

AM FRIDAY PM

AM_PM HOUR SATURDAY

APRIL HOUR_OF_DAY SECOND

AUGUST JANUARY SEPTEMBER

DATE JULY SUNDAY

DAY_OF_MONTH JUNE THURSDAY

DAY_OF_WEEK MARCH TUESDAY

DAY_OF_WEEK_IN_MONTH MAY UNDECIMBER

DAY_OF_YEAR MILLISECOND WEDNESDAY

DECEMBER MINUTE WEEK_OF_MONTH

DST_OFFSET MONDAY WEEK_OF_YEAR

ERA MONTH YEAR

FEBRUARY NOVEMBER ZONE_OFFSET

FIELD_COUNT OCTOBER

下面的程序举例说明了几个Calendar方法:

// Demonstrate Calendar

import java.util.Calendar;

class CalendarDemo {

public static void main(String args[]) {

String months[] = {

"Jan", "Feb", "Mar", "Apr",

"May", "Jun", "Jul", "Aug",

"Sep", "Oct", "Nov", "Dec"};

// Create a calendar initialized with the

// current date and time in the default

// locale and timezone.

Calendar calendar = Calendar.getInstance();

// Display current time and date information.

System.out.print("Date: ");

System.out.print(months[calendar.get(Calendar.MONTH)]);

System.out.print(" " + calendar.get(Calendar.DATE) + " ");

System.out.println(calendar.get(Calendar.YEAR));

System.out.print("Time: ");

System.out.print(calendar.get(Calendar.HOUR) + ":");

System.out.print(calendar.get(Calendar.MINUTE) + ":");

System.out.println(calendar.get(Calendar.SECOND));

// Set the time and date information and display it.

calendar.set(Calendar.HOUR, 10);

calendar.set(Calendar.MINUTE, 29);

calendar.set(Calendar.SECOND, 22);

System.out.print("Updated time: ");

System.out.print(calendar.get(Calendar.HOUR) + ":");

System.out.print(calendar.get(Calendar.MINUTE) + ":");

System.out.println(calendar.get(Calendar.SECOND));

}

}

该程序的输出显示如下:

Date: Jan 25 2001

Time: 11:24:25

Updated time: 10:29:22

<<上一页 1 2 3 4 5 6 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
· 工信部“三定”公布 总编制731名设24司局
· 北京发电子商务监管意见 营利性网店须办照
· 直播 08中国城市信息化高峰论坛 案例点评
· 烽火网络校园解决方案 移民安置信息管理系统
  IT博客 ·曾剑秋·项立刚·Java学习·网管
  IT技术论坛 ·开发·网管·安全·数据库·系统