Servlet 处理日期涉及获取、格式化和显示日期时间,常用于日志记录、用户输入处理或动态内容生成。本文将介绍如何在Servlet中使用Java日期相关API处理日期。


目录

  1. 日期处理概述
  2. 使用传统日期API
  3. 使用现代日期API (Java 8+)
  4. 处理用户输入日期
  5. 完整示例
  6. 部署与测试
  7. 参考资料

1. 日期处理概述

  • 目的:在Servlet中生成当前时间、格式化日期或解析用户输入的日期。
  • API
  • 传统:java.util.Datejava.text.SimpleDateFormat
  • 现代:java.time 包(如 LocalDateTime),推荐使用。
  • 用途:显示时间戳、记录操作时间等。

2. 使用传统日期API

获取当前日期

import java.util.Date;
Date currentDate = new Date();

格式化日期

import java.text.SimpleDateFormat;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = sdf.format(currentDate);

3. 使用现代日期API (Java 8+)

获取当前日期时间

import java.time.LocalDateTime;
LocalDateTime now = LocalDateTime.now();

格式化日期

import java.time.format.DateTimeFormatter;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDate = now.format(formatter);

4. 处理用户输入日期

解析日期

String userDate = request.getParameter("date"); // 如 "2025-03-26"
LocalDate date = LocalDate.parse(userDate, DateTimeFormatter.ISO_LOCAL_DATE);

验证与异常处理

try {
    LocalDate date = LocalDate.parse(userDate, DateTimeFormatter.ISO_LOCAL_DATE);
} catch (DateTimeParseException e) {
    response.sendError(HttpServletResponse.SC_BAD_REQUEST, "日期格式错误");
}

5. 完整示例

以下是一个展示日期处理的Servlet。

HTML:date.html

<!DOCTYPE html>
<html>
<head><title>日期处理</title></head>
<body>
    <h2>输入日期</h2>
    <form method="POST" action="/myapp/date">
        日期 (yyyy-MM-dd): <input type="text" name="userDate"><br>
        <input type="submit" value="提交">
    </form>
    <a href="/myapp/date">查看当前时间</a>
</body>
</html>

Servlet:DateServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.time.*;
import java.time.format.*;

public class DateServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        out.println("<html><body>");
        out.println("<h1>当前时间</h1>");
        out.println("<p>" + now.format(formatter) + "</p>");
        out.println("<a href=\"/myapp/date.html\">返回</a>");
        out.println("</body></html>");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        String userDate = request.getParameter("userDate");
        out.println("<html><body>");
        out.println("<h1>日期处理结果</h1>");

        if (userDate != null && !userDate.trim().isEmpty()) {
            try {
                LocalDate date = LocalDate.parse(userDate, DateTimeFormatter.ISO_LOCAL_DATE);
                out.println("<p>输入日期: " + date.format(DateTimeFormatter.ISO_LOCAL_DATE) + "</p>");
                out.println("<p>下一天: " + date.plusDays(1).format(DateTimeFormatter.ISO_LOCAL_DATE) + "</p>");
            } catch (DateTimeParseException e) {
                out.println("<p>错误: 日期格式应为 yyyy-MM-dd</p>");
            }
        } else {
            out.println("<p>请输入日期</p>");
        }
        out.println("<a href=\"/myapp/date.html\">返回</a>");
        out.println("</body></html>");
    }
}

配置:web.xml

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <servlet>
        <servlet-name>DateServlet</servlet-name>
        <servlet-class>DateServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DateServlet</servlet-name>
        <url-pattern>/date</url-pattern>
    </servlet-mapping>
</web-app>

6. 部署与测试

部署

  1. 编译:
   javac -cp /path/to/tomcat/lib/servlet-api.jar DateServlet.java
  1. .class 文件放入 myapp/WEB-INF/classes/
  2. date.html 放入 myapp/
  3. 更新 web.xml
  4. 部署 myapp 到Tomcat的 webapps 目录。
  5. 启动Tomcat。

测试

  • 访问:http://localhost:8080/myapp/date
  • 显示当前时间。
  • 输入日期:
  • “2025-03-26”:显示日期及下一天。
  • “abc”:显示格式错误提示。
  • 留空:提示输入日期。

7. 参考资料

出站链接

其他资源

  • 《Java 8 in Action》 – 日期时间章节。
  • X社区:搜索 #ServletDate 获取示例。

这篇指南展示了Servlet中日期的获取、格式化和处理。如果需要更复杂功能(如时区处理或日期计算),请告诉我!