Servlet 处理日期涉及获取、格式化和显示日期时间,常用于日志记录、用户输入处理或动态内容生成。本文将介绍如何在Servlet中使用Java日期相关API处理日期。
目录
1. 日期处理概述
- 目的:在Servlet中生成当前时间、格式化日期或解析用户输入的日期。
- API:
- 传统:
java.util.Date
和java.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. 部署与测试
部署
- 编译:
javac -cp /path/to/tomcat/lib/servlet-api.jar DateServlet.java
- 将
.class
文件放入myapp/WEB-INF/classes/
。 - 将
date.html
放入myapp/
。 - 更新
web.xml
。 - 部署
myapp
到Tomcat的webapps
目录。 - 启动Tomcat。
测试
- 访问:
http://localhost:8080/myapp/date
- 显示当前时间。
- 输入日期:
- “2025-03-26”:显示日期及下一天。
- “abc”:显示格式错误提示。
- 留空:提示输入日期。
7. 参考资料
出站链接
- Java Time API – 现代日期API。
- SimpleDateFormat – 传统日期格式化。
- Java EE教程 – Servlet基础。
其他资源
- 《Java 8 in Action》 – 日期时间章节。
- X社区:搜索 #ServletDate 获取示例。
这篇指南展示了Servlet中日期的获取、格式化和处理。如果需要更复杂功能(如时区处理或日期计算),请告诉我!
发表回复