Сервлет: Обработка дат

Одно из самых важных преимуществ использования сервлетов заключается в том, что вы можете использовать большинство доступных методов в базовой Java. В этой главе будет объяснён предоставляемый Java пакетjava.util, классDate, который инкапсулирует текущую дату и время.

Класс Date поддерживает два конструктора. Первый конструктор инициализирует объект текущими датой и временем.

Date( )

Следующий конструктор принимает параметр, равный количеству миллисекунд, прошедших с полуночи 1 января 1970 года.

Date(long millisec)

Получив пригодный для использования объект Date, вы можете вызвать любой из следующих поддерживаемых методов для работы с датой:

Порядковый номерМетод и описание
1boolean after(Date date)
Возвращает true, если дата, содержащаяся в вызванном объекте Date, позже даты, указанной в date, иначе возвращает false.
2boolean before(Date date)
Возвращает true, если дата, содержащаяся в вызванном объекте Date, раньше даты, указанной в date, иначе возвращает false.
3Object clone( )
Дублирует вызывающий объект Date.
4int compareTo(Date date)
Сравнивает значение вызывающего объекта со значением date. Возвращает 0, если два значения равны. Возвращает отрицательное значение, если вызывающий объект раньше date. Возвращает положительное значение, если вызывающий объект позже date.
5int compareTo(Object obj)
Если obj относится к классу Date, операция эквивалентна compareTo(Date). В противном случае выбрасывается ClassCastException.
6boolean equals(Object date)
Возвращает true, если время и дата, содержащиеся в вызванном объекте Date, совпадают с указанными в date, иначе возвращает false.
7long getTime( )
Возвращает количество миллисекунд, прошедших с 1 января 1970 года.
8int hashCode( )
Возвращает хеш-код для вызывающего объекта.
9void setTime(long time)
Устанавливает время и дату, заданные параметром time, который представляет время, прошедшее с полуночи 1 января 1970 года (в миллисекундах).
10String toString( )
Преобразует объект Date, для которого вызван метод, в строку и возвращает результат.

Получите текущие дату и время

Получение текущих даты и времени в Java Servlet очень легко. Вы можете использовать методtoString()обычного объекта Date, чтобы вывести текущие дату и время, как показано ниже:

package com.example.test;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CurrentDate
 */
@WebServlet("/CurrentDate")
public class CurrentDate extends HttpServlet {
    private static final long serialVersionUID = 1L;
   
    public CurrentDate() {
        super();
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
          String title = "显示当前的日期和时间";
        Date date = new Date();
        String docType = "<!DOCTYPE html> \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:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
  <servlet>
    <servlet-name>CurrentDate</servlet-name>
    <servlet-class>com.example.test.CurrentDate</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CurrentDate</servlet-name>
    <url-pattern>/TomcatTest/CurrentDate</url-pattern>
  </servlet-mapping>
</web-app>

Затем вызовите Servlet, обратившись по адресу http://localhost:8080/TomcatTest/CurrentDate. Это даст следующий результат:

Попробуйте обновить URL http://localhost:8080/TomcatTest/CurrentDate. Каждый раз, когда вы обновляете страницу через несколько секунд, вы заметите разницу в отображаемом времени.

Сравнение дат

Как упоминалось выше, в Servlet можно использовать все доступные методы Java. Если вам нужно сравнить две даты, вот методы:

  • Вы можете использовать getTime(), чтобы для обоих объектов получить время, прошедшее с полуночи 1 января 1970 года (в миллисекундах), а затем сравнить эти два значения.
  • Вы можете использовать методы before(), after() и equals(). Поскольку 12-е число предшествует 18-му в месяце, например, new Date(99, 2, 12).before(new Date(99, 2, 18)) возвращает true.
  • Вы можете использовать метод compareTo(), который определён в интерфейсе Comparable и реализован в Date.

Используйте SimpleDateFormat для форматирования дат

SimpleDateFormat — это конкретный класс для форматирования и разбора дат с учётом локали. SimpleDateFormat позволяет выбрать любой определяемый пользователем шаблон форматирования даты и времени.

Давайте изменим приведённый выше пример следующим образом:

package com.example.test;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class CurrentDate
 */
@WebServlet("/CurrentDate")
public class CurrentDate extends HttpServlet {
    private static final long serialVersionUID = 1L;
   
    public CurrentDate() {
        super();
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=UTF-8");
        
        PrintWriter out = response.getWriter();
        String title = "显示当前的日期和时间";
        Date dNow = new Date( );
        SimpleDateFormat ft = 
                new SimpleDateFormat ("yyyy.MM.dd  hh:mm:ss E a ");
        String docType = "<!DOCTYPE html> \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>");
    }

}

Скомпилируйте вышеуказанный сервлет ещё раз, затем вызовите его, перейдя по адресу http://localhost:8080/TomcatTest/CurrentDate. Это даст следующий результат:


Коды формата Simple date format

Используйте строки шаблона времени для указания формата времени. В этом режиме все буквы ASCII зарезервированы как буквы шаблона, которые определяются следующим образом:

СимволОписаниеПример
GИндикатор эрыAD
yГод, представленный четырьмя цифрами2001
MМесяц в годуИюль или 07
dДень в месяце10
hЧас с A.M./P.M. (1-12)12
HЧас в сутках (0-23)22
mМинута в часе30
sСекунда в минуте55
SМиллисекунда234
EДень неделиВторник
DДень года360
FНеделя месяца2 (вторая среда в июле)
wНеделя года40
WНеделя в месяце1
aМаркер A.M./P.M.PM
kЧас в сутках (1-24)24
KЧас с A.M./P.M. (0-11)10
zЧасовой поясВосточное стандартное время
'Экранирование текстаРазделитель
"Одинарная кавычка`

Полный список доступных методов работы с датами можно найти в стандартной документации Java.

Другие расширения