Servlets 简明教程

Servlets - Handling Date

使用 Servlet 最重要的优点之一是您可以在核心 Java 中使用大多数可用方法。本教程将引导您逐步了解 Java 提供的 Date 类,该类在 java.util 包中可用,此类封装当前日期和时间。

One of the most important advantages of using Servlet is that you can use most of the methods available in core Java. This tutorial would take you through Java provided Date class which is available in java.util package, this class encapsulates the current date and time.

Date 类支持两个构造函数。第一个构造函数使用当前日期与时间初始化对象。

The Date class supports two constructors. The first constructor initializes the object with the current date and time.

Date( )

以下构造函数接受一个参数,该参数等于自 1970 年 1 月 1 日午夜以来経過的毫秒数

The following constructor accepts one argument that equals the number of milliseconds that have elapsed since midnight, January 1, 1970

Date(long millisec)

一旦您有可用的 Date 对象,便可以调用以下任何支持方法来处理日期 -

Once you have a Date object available, you can call any of the following support methods to play with dates −

Sr.No.

Methods & Description

1

boolean after(Date date) Returns true if the invoking Date object contains a date that is later than the one specified by date, otherwise, it returns false.

2

boolean before(Date date) Returns true if the invoking Date object contains a date that is earlier than the one specified by date, otherwise, it returns false.

3

Object clone( ) Duplicates the invoking Date object.

4

int compareTo(Date date) Compares the value of the invoking object with that of date. Returns 0 if the values are equal. Returns a negative value if the invoking object is earlier than date. Returns a positive value if the invoking object is later than date.

5

int compareTo(Object obj) Operates identically to compareTo(Date) if obj is of class Date. Otherwise, it throws a ClassCastException.

6

boolean equals(Object date) Returns true if the invoking Date object contains the same time and date as the one specified by date, otherwise, it returns false.

7

long getTime( ) Returns the number of milliseconds that have elapsed since January 1, 1970.

8

int hashCode( ) Returns a hash code for the invoking object.

9

void setTime(long time) Sets the time and date as specified by time, which represents an elapsed time in milliseconds from midnight, January 1, 1970.

10

String toString( ) Converts the invoking Date object into a string and returns the result.

Getting Current Date & Time

在 Java Servlet 中获取当前日期和时间非常简单。您可以使用一个简单的 Date 对象和 toString() 方法来按如下方式打印当前日期和时间 -

This is very easy to get current date and time in Java Servlet. You can use a simple Date object with toString() method to print current date and time as follows −

// 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 [role="bare"] [role="bare"]http://localhost:8080/CurrentDate 调用此 servlet。这将产生以下结果 -

Now let us compile above servlet and create appropriate entries in web.xml and then call this servlet using URL [role="bare"]http://localhost:8080/CurrentDate. This would produce following result −

Display Current Date & Time
Mon Jun 21 21:46:49 GMT+04:00 2010

尝试刷新 URL [role="bare"] [role="bare"]http://localhost:8080/CurrentDate ,每次刷新您都会发现几秒钟的差异。

Try to refresh URL [role="bare"]http://localhost:8080/CurrentDate and you would find difference in seconds every time you would refresh.

Date Comparison

如上所述,您可以在 Servlet 中使用所有可用的 Java 方法。如果您需要比较两个日期,以下是方法:

As I mentioned above you can use all the available Java methods in your Servlet. In case you need to compare two dates, following are the methods −

  1. You can use getTime( ) to obtain the number of milliseconds that have elapsed since midnight, January 1, 1970, for both objects and then compare these two values.

  2. You can use the methods before( ), after( ), and equals( ). Because the 12th of the month comes before the 18th, for example, new Date(99, 2, 12).before(new Date (99, 2, 18)) returns true.

  3. You can use the compareTo( ) method, which is defined by the Comparable interface and implemented by Date.

Date Formatting using SimpleDateFormat

SimpleDateFormat 是一个用于以特定语言敏感的方式设置和解析日期的具体类。使用 SimpleDateFormat,可以选择任何用户定义的模式来设置日期和时间格式。

SimpleDateFormat is a concrete class for formatting and parsing dates in a localesensitive manner. SimpleDateFormat allows you to start by choosing any user-defined patterns for date-time formatting.

让我们修改上面的示例,如下所示:

Let us modify above example as follows −

// 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 [role="bare"] [role="bare"]http://localhost:8080/CurrentDate 调用此 servlet。这将产生以下结果:

Compile above servlet once again and then call this servlet using URL [role="bare"]http://localhost:8080/CurrentDate. This would produce following result −

Display Current Date & Time
Mon 2010.06.21 at 10:06:44 PM GMT+04:00

Simple DateFormat Format Codes

要指定时间格式,请使用时间模式字符串。在此模式中,保留所有 ASCII 字母作为模式字母,定义如下:

To specify the time format use a time pattern string. In this pattern, all ASCII letters are reserved as pattern letters, which are defined as the following −

Character

Description

Example

G

Era designator

AD

y

Year in four digits

2001

M

Month in year

July or 07

d

Day in month

10

h

Hour in A.M./P.M. (1~12)

12

H

Hour in day (0~23)

22

m

Minute in hour

30

s

Second in minute

55

S

Millisecond

234

E

Day in week

Tuesday

D

Day in year

360

F

Day of week in month

2 (second Wed. in July)

w

Week in year

40

W

Week in month

1

a

A.M./P.M. marker

PM

k

Hour in day (1~24)

24

K

Hour in A.M./P.M. (0~11)

10

z

Time zone

Eastern Standard Time

'

Escape for text

Delimiter

"

Single quote

`

有关用于操作日期的可用常量方法的完整列表,请参阅标准 Java 文档。

For a complete list of constant available methods to manipulate date, you can refer to standard Java documentation.