在jsp中,我们经常要处理有关日期和时间的信息,这时候你可以使用Java.util中的Date类,在编写Java源程序时,情况很明显,你必须通过“import java.util.*”引入java.util软件包;而在编写JSP源程序时,由于Date不是JSP的默认对象,你仍然必须通过“<%@ page import="java.util.*"”引入这个软件包。此外,由于在java.sql中存在一个同名的Date类,为了将这两者正确地区分,凡是用到java.util中的Date类时,你最好将其写成java.util.Date。
事实上,Date类并不仅仅表示日期,而是精确到毫秒。从这个角度看,也许将其称为DateTime更为合适,在本文中,我们有时也将Date称为日期,希望不会引起读者的误解。
在谈到java.util中的Date类时,我们经常会提到UTC和GMT,这两者几乎是同一概念。它们都是指的格林尼治标准时间,只不过UTC的称呼更为正式一点。两者的区别在于前者是一个天文上的概念,而后者是基于一个原子钟。在UTC中,每一年或两年会有一个“闰秒”,而我们一般不理会这个“闰秒”,但是在Java中,这造成我们有时会出现60秒或61秒。
Date类中有相应的方法,它可以将日期分解为年、月、日、时、分、秒,可以将其转换成一个字符串,它还可以执行反向的操作。但是从JDK1.1开始,Calendar类和Date Format类也可以执行这两类的功能,按照Java的官方文件,相应的在Date类中的方法不再推荐使用。但是在原理上,两者并没过大的差别。在本文中,我们仍将介绍这些方法,只是会作相应的注明。
在所有情况下,这些方法所接受的参数都不需要满足有效范围;例如,一个日期假如被定义为1月32日,它将被解释为2月1日。
一、Date的构造函数
1.1构造一个反映当时时间的Date实例
Date
public Date()
构造一个Date对象并对其进行初始化以反映当前时间。
1.2从一个长整型数据构造一个Date实例
Date
public Date(long date)
构造一个Date对象,并根据相对于GMT 1970年1月1日00:00:00的毫秒数对其进行初始化。
参数:
date - 相对于GMT 1970年1月1日00:00:00的毫秒数。
1.3从年月日时分秒构造一个Date实例
Date
public Date(int year,
int month,
int date)
public Date(int year,
int month,
int date,
int hrs,
int min)
public Date(int year,
int month,
int date,
int hrs,
int min,
int sec)
这三个构造函数均不推荐使用,在JDK 1.1版中,分别被Calendar.set(year + 1900, month, date)或GregorianCalendar(year + 1900, month, date)、Calendar.set(year + 1900, month, date, hrs, min)或 GregorianCalendar(year + 1900, month, date, hrs, min)、Calendar.set(year + 1900, month, date, hrs, min, sec)或GregorianCalendar(year + 1900, month, date, hrs, min, sec)代替。
构造一个Date对象,并分别将其初始化为year、month和date所对应日期的开始时间(即午夜)、year、month、date、hrs和min所对应分钟的开始时间、year、month、date、hrs、 min和sec所对应秒的开始时间。
参数:
year - 年份减去1900。
month - 月份在0-11之间。
date - 日期在1-31之间。
hrs - 小时在0-23之间。
min - 分钟在0-59之间。
sec - 秒在0-59之间。
1.4从一个字符串构造一个Date实例
Date
public Date(String s)
不推荐使用。 在JDK 1.1版中,被DateFormat.parse(String s)代替。
构造一个Date对象,并将其初始化为字符串s所对象的日期和时间。对字符串的解析将和parse(java.lang.String)方法一样。
参数:
s - 一个反映日期的字符串。
二、其它方法
2.1将一个字符串转换成Date对象相应的长整形表示
parse
public static long parse(String s)
不推荐使用。 在JDK 1.1版中,被DateFormat.parse(String s)代替。
试图将字符串s作为日期和时间的表示来解析。假如解析是成功的,将返回相对于GMT 1970年1月1日00:00:00的毫秒数。反之,将抛出IllegalArgumentException例外。
它可以接受许多语句格式;具体地说,它可以理解这种格式:"Sat, 12 Aug 1995 13:30:00 GMT"。它也可以理解U.S.这样的时区缩写,但是通常,我们这样表示时区:"Sat, 12 Aug 1995 13:30:00 GMT+0430"。假如没指明时区,那就表示默认当前的时区。在这里,GMT和UTC表示相同的概念。
字符串s是从左到右进行处理的。在“(”和“)”之间的字符将被忽略。括号可以嵌套。此外,该字符串只能包含以下字符:
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789,+-:/
和空格。