Servlet - 處理日期



使用 Servlet 的最大優勢之一是您可以使用核心 Java 中的大多數方法。本教程將引導您瞭解 Java 提供的Date類,該類位於java.util包中,此類封裝了當前日期和時間。

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,則返回負值。如果呼叫物件晚於 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)

設定由 time 指定的時間和日期,time 表示自 1970 年 1 月 1 日午夜以來的毫秒數。

10

String toString( )

將呼叫 Date 物件轉換為字串並返回結果。

獲取當前日期和時間

在 Java Servlet 中獲取當前日期和時間非常簡單。您可以使用帶有 toString() 方法的簡單 Date 物件來列印當前日期和時間,如下所示:

// Import required java libraries
import java.io.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class CurrentDate extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Display Current Date & Time";
      Date date = new Date();
      String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<h2 align = \"center\">" + date.toString() + "</h2>\n" +
            "</body>
         </html>"
      );
   }
}

現在讓我們編譯上面的 servlet 並建立 web.xml 中的相應條目,然後使用 URL https://:8080/CurrentDate 呼叫此 servlet。這將產生以下結果:

Display Current Date & Time

Mon Jun 21 21:46:49 GMT+04:00 2010

嘗試重新整理 URL https://:8080/CurrentDate,您會發現每次重新整理時秒數都會有所不同。

日期比較

如上所述,您可以在 Servlet 中使用所有可用的 Java 方法。如果您需要比較兩個日期,以下是一些方法:

  • 您可以使用 getTime( ) 獲取自 1970 年 1 月 1 日午夜以來的毫秒數,用於兩個物件,然後比較這兩個值。

  • 您可以使用 before( )、after( ) 和 equals( ) 方法。例如,因為 12 號在 18 號之前,所以 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回 true。

  • 您可以使用 compareTo( ) 方法,該方法由 Comparable 介面定義並由 Date 實現。

使用 SimpleDateFormat 進行日期格式化

SimpleDateFormat 是一個具體的類,用於以區域感知的方式格式化和解析日期。SimpleDateFormat 允許您首先為日期時間格式選擇任何使用者定義的模式。

讓我們修改上面的示例,如下所示:

// Import required java libraries
import java.io.*;
import java.text.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;
 
// Extend HttpServlet class
public class CurrentDate extends HttpServlet {
 
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Display Current Date & Time";
      Date dNow = new Date( );
      SimpleDateFormat ft = new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
      String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      
      out.println(docType +
         "<html>\n" +
            "<head><title>" + title + "</title></head>\n" +
            "<body bgcolor = \"#f0f0f0\">\n" +
               "<h1 align = \"center\">" + title + "</h1>\n" +
               "<h2 align = \"center\">" + ft.format(dNow) + "</h2>\n" +
            "</body>
         </html>"
      );
   }
}

再次編譯上面的 servlet,然後使用 URL https://:8080/CurrentDate 呼叫此 servlet。這將產生以下結果:

Display Current Date & Time

Mon 2010.06.21 at 10:06:44 PM GMT+04:00

SimpleDateFormat 格式程式碼

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

字元 描述 示例
G 紀元指示符 公元
y 四位數年份 2001
M 年中的月份 七月或 07
d 月中的日期 10
h 上午/下午的小時 (1~12) 12
H 一天中的小時 (0~23) 22
m 小時中的分鐘 30
s 分鐘中的秒鐘 55
S 毫秒 234
E 一週中的日期 星期二
D 年中的日期 360
F 月中的星期幾 2 (七月中的第二個星期三)
w 年中的星期 40
W 月中的星期 1
a 上午/下午標記 下午
k 一天中的小時 (1~24) 24
K 上午/下午的小時 (0~11) 10
z 時區 東部標準時間
' 轉義文字 分隔符
" 單引號 `

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

廣告