JSP處理日期


在本章中,我們將討論如何處理JSP中的資料。 使用JSP最重要的優點之一就是可以使用核心Java中的所有可用方法。我們將瀏覽java.util包中提供的Date類; 這個類封裝了當前的日期和時間。

Date類支援兩個建構函式。第一個建構函式使用當前日期和時間初始化物件。

Date( )

以下建構函式接受一個等於從1970年1月1日午夜以來經過的毫秒數的引數。

Date(long millisec)

當實現一個Date物件後,就可以呼叫以下任何支援方法來操作日期 -

編號 方法 描述
1 boolean after(Date date) 如果呼叫的Date物件包含的日期晚於date指定的日期,則返回true,否則返回false
2 boolean before(Date date) 如果呼叫的Date物件包含早於date指定的日期,則返回true,否則返回false
3 Object clone( ) 複製呼叫Date物件。
4 int compareTo(Date date) 將呼叫物件的值與date對應的值進行比較。 如果值相等,則返回0。 如果呼叫物件早於date,則返回負值。 如果呼叫物件晚於日期,則返回正值。
5 int compareTo(Object obj) 如果obj是類Date的物件,則與compareTo(Date)的操作相同。 否則會引發ClassCastException
6 boolean equals(Object date) 如果呼叫的Date物件包含與date指定的時間和日期相同的時間和日期,則返回true,否則返回false
7 long getTime( ) 返回從1970年1月1日起經過的毫秒數。
8 int hashCode( ) 返回撥用物件的雜湊碼。
9 void setTime(long time) 設定時間指定的時間和日期,表示從1970年1月1日午夜開始的以毫秒為單位的經過時間
10 String toString( ) 將呼叫的Date物件轉換為字串並返回結果。

為了方便演示下面的範例,我們開啟Eclipse建立一個動態Web專案:HandlingDate,並在這個專案中建立對應的範例JSP頁面作為演示。

獲取當前日期和時間

使用JSP程式,很容易得到當前日期和時間。 可以使用Date物件的toString()方法的來列印當前日期和時間,如下所示:

檔案:curDatetime.jsp -

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*, javax.servlet.*"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP獲取當前時間範例</title>
</head>
<body>
    <div style="margin: auto; width: 80%">
        <center>
            <h1>顯示當前日期和時間</h1>
        </center>
        <%
            Date date = new Date();
            out.print("<h2 align = \"center\">" + date.toString() + "</h2>");
        %>
    </div>
</body>
</html>

編寫完成上面程式碼後,然後部署專案,開啟瀏覽器存取URL: http://localhost:8080/HandlingDate/curDatetime.jsp 呼叫此JSP。將收到以下結果 -

每次重新整理時,您都會發現以秒為單位的有所變化。

日期比較

如上一節所述,可以在JSP指令碼中使用所有可用的Java方法。如果需要比較兩個日期,請考慮以下方法 -

  • 使用getTime()方法來獲取1970年1月1日午夜以後兩個物件所經過的毫秒數,然後比較這兩個值。
  • 使用before()after()equals()方法,因為本月十二號是在18日之前; 例如,新的Date(1999,2,12).before(new Date(1999,2,18))返回true
  • 使用compareTo()方法; 該方法由Comparable介面定義,並由Date實現。

使用SimpleDateFormat格式化日期

SimpleDateFormat是一個具體的類,用於以區域設定方式格式化和解析日期。SimpleDateFormat允許從選擇任何使用者定義的日期時間格式的模式開始。

修改上面的例子如下 -

檔案:DateFormatting.jsp -

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*"%>
<%@ page import="javax.servlet.*,java.text.*"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>格式化日期範例</title>
</head>
<body>
    <div style="margin: auto; width: 80%">

        <center>
            <h1>當前時間格式化</h1>
        </center>
        <%
            Date dNow = new Date();
            SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a zzz");
            out.print("<h2 align=\"center\">" + ft.format(dNow) + "</h2>");
        %>
    </div>

</body>
</html>

編寫完成上面程式碼後,然後部署專案,開啟瀏覽器存取URL: http://localhost:8080/HandlingDate/DateFormatting.jsp 呼叫此JSP。將收到以下結果 -

簡單的日期格式格式程式碼

要指定時間格式,請使用時間模式字串。 在這種模式中,所有ASCII字母都保留為模式字母,其定義如下:

字元 描述 範例
G 時代的標誌 AD
y 年份四位數 2019
M 月份 July07
d 月份中的天 0
h A.M./P.M.(1~12)小時格式 2
H 小時格式(0~23) 22
m 分鐘小時 30
s 秒鐘 55
S 毫秒 234
E 一周中的一天 Tuesday
D 一年中的一天 360
F 月份中的星期 2(七月第2個週三)
w 一年中星期數 40
W 一個月
a A.M./P.M.標記 PM
k 小時(1~24) 24
K A.M./P.M.(0~11)小時形式 0
z 時區 東部標準時間
' 逃義文字 分隔符
" 單引號 `

有關操作日期的常用可用方法的完整列表,可以參考標準Java文件。