JSP - 处理日期
使用 JSP 的一个最重要的优点是,你可以使用核心 Java 中所有有效的方法。本教程将教你使用 Java 提供的 Date 类,它在 java.util 包是有效的,这个类封装了当前的日期和时间。
这个 Date 类支持两种构造函数。第一种构造函数是初始化当前日期和时间的对象。
Date( )
下面的构造函数是设置一个参数,该参数是从 1970 年 1 月 1 日凌晨 0 点开始至今的毫秒数。
Date(long millisec)
一旦你有一个有效的 Date 对象,你可以调用以下任何支持的方法实现日期:
| SN | 方法描述 |
|---|---|
| 1 |
boolean after(Date date) 如果调用的 Date 对象包含的日期晚于指定的日期,则返回 true,否则返回 false。 |
| 2 |
boolean before(Date date) 如果调用的 Date 对象包含的日期早于指定的日期,则返回 true,否则返回 false。 |
| 3 |
Object clone( ) 重复调用的 Date 对象。 |
| 4 |
int compareTo(Date date) 比较调用的 Date 对象与 date 的值。如果值是相等的,则返回 0。如果调用的 Date 对象比 date 更早,则返回一个负数。如果调用 Date 对象是晚于 date 的,则返回一个正数。 |
| 5 |
int compareTo(Object obj) 如果 obj 是 Date 类,则操作与 compareTo(Date) 是同一个,否则抛出 ClassCastException 异常。 |
| 6 |
boolean equals(Object date) 如果调用的 Date 对象与指定的日期有相同的时间和日期,则返回 true,否则返回 false。 |
| 7 |
long getTime( ) 返回从 1970 年 1 月 1 日凌晨 0 点开始至今的毫秒数。 |
| 8 |
int hashCode( ) 返回调用对象的哈希编码 |
| 9 |
void setTime(long time) 由指定的时间设置时间和日期,它表示从 1970 年 1 月 1 日凌晨 0 点开始到指定时间的毫秒数。 |
| 10 |
String toString( ) 转换调用的 Date 对象到 string 类型,并且返回该结果。 |
得到当前日期 & 时间
在 JSP 程序中,很容易得到当前日期和时间。你可以使用一个简单的 Date 对象调用 toString() 方法来输出当前的日期和时间,如下所示:
<%@ page import="java.io.*,java.util.*, javax.servlet.*" %> <html> <head> <title>Display Current Date & Time</title> </head> <body> <center> <h1>Display Current Date & Time</h1> </center> <% Date date = new Date(); out.print( "<h2 align=\"center\">" +date.toString()+"</h2>"); %> </body> </html>
现在我们将保持 CurrentDate.jsp 中代码,然后使用 URL http://localhost:8080/CurrentDate.jsp 来调用此 JSP。将产生如下结果:
Display Current Date & Time
Mon Jun 21 21:46:49 GMT+04:00 2010
尝试刷新 URL http://localhost:8080/CurrentDate.jsp ,你将会发现每一次刷新都会有几秒钟的区别。
日期比较
正如上面提到的,你可以使用所有有效的 Java 方法在你的 JavaScript 中。如果你需要比较两个日期,下面是方法:
-
你可以用 getTime() 方法分别获得这两个对象从 1970 年 1 月 1 日凌晨 0 点开始至今的毫秒数,然后比较这两个值。
-
你可以使用方法 before(),after() 和 equals()。因为每月的 12 日在 18 日之前,例如,new Date(99,2,12).(new Date(99,2,18)),返回 true。
- 你可以使用 compareTo() 方法,它由 Comparable 接口定义并且有 Date 实现。
用 SimpleDateFormat 实现日期格式化
SimpleDateFormat 是用对语言环境敏感的方式来格式化和解析日期的具体类。SimpleDateFormat 允许你对日期时间格式来选择任何用户定义的模式开始。
让我们修改上面的例子,如下所示:
<%@ page import="java.io.*,java.util.*" %>
<%@ page import="javax.servlet.*,java.text.*" %>
<html>
<head>
<title>Display Current Date & Time</title>
</head>
<body>
<center>
<h1>Display Current Date & Time</h1>
</center>
<%
Date dNow = new Date( );
SimpleDateFormat ft =
new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
out.print( "<h2 align=\"center\">" + ft.format(dNow) + "</h2>");
%>
</body>
</html>
再次编译上述 Servlet,然后使用 URL http://localhost:8080/CurrentDate 来调用此 Servlet。将产生如下结果:
Display Current Date & Time
Mon 2010.06.21 at 10:06:44 PM GMT+04:00
Simple DateFormat 格式化代码
指定时间格式使用一个时间模式字符串。在这个模式中,所有 ASCII 字母被保留为模式字母,它们被定义为如下:
| 字符 | 描述 | 例子 |
|---|---|---|
| G | 时代指示符 | AD |
| y | 四位数的某年 | 2001 |
| M | 一年中的某月 | July or 07 |
| d | 一月中的某日 | 10 |
| h | A.M./P.M. (1~12)的某小时 | 12 |
| H | 一天 (0~23)中的某小时 | 22 |
| m | 一小时中的某分钟 | 30 |
| s | 一分钟中的某秒 | 55 |
| S | 毫秒 | 234 |
| E | 一周中的某天 | Tuesday |
| D | 一年中的某天 | 360 |
| F | 一月中的一周的某天 | 2 (second Wed. in July) |
| w | 一年中的某周 | 40 |
| W | 一月中的某周 | 1 |
| a | A.M./P.M.标记 | PM |
| k | 一天(1~24)中的某小时 | 24 |
| K | A.M./P.M. (0~11)的某小时 | 10 |
| z | 时区 | Eastern Standard Time |
| ' | 消逝的文本 | Delimiter |
| " | 单引号 | ` |
对于一个用不变且有效的方法来操作日期的完整清单,你可以参考标准的 Java 文件。