16.3 Date(日期) Date类封装当前的日期和时间。在开始检验Date类之前,需要着重强调的是:这里讨论的Date类与其在Java 1.0中所定义的原始版本相比,已经发生了本质上的改变。在Java 1.1公布的时候,许多原来由原始Date类执行的函数功能被移入到Calendar和DateFormat类中,这样做的结果就导致许多最初1.0中的Date方法被摈弃。在Java 2中对时间和日期类增加了几个新的方法,但是以与Java 1.1中相同的形式来实现它们。由于被摈弃的Java 1.0中的方法不被新的程序所使用,这里就不讨论它们了。Date支持下面的构造函数: Date( ) Date(long millisec) 第一种形式的构造函数用当前的日期和时间初始化对象。第二种形式的构造函数接收一个参数,该参数等于从1970年1月1日午夜起至今的毫秒数的大小。由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( ) 返回自1970年1月1日起至今的毫秒数的大小 int hashCode( ) 返回调用对象的散列值 void setTime(long time) 按time的指定,设置时间和日期,表示自1970年1月1日午夜至今的以毫秒为单位的时间值 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( )方法获得它们各自自1970年1月1日午夜起至今的毫秒数的大小。然后比较这两个值的大小。其次,可以使用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类库的一个方面。这种子类的一个例子是GregorianCalendar。Calendar提供非公共的构造函数。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.YEAR,Calendar.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
下一页>>
|