菜鸟科技网

JSP如何获取当前时间?

使用 JSP 表达式语言(EL Expression) - 最简单

这是在 JSP 页面中直接显示时间的最简单方法,EL 表达式 可以方便地访问 Java 对象的属性和方法。

JSP如何获取当前时间?-图1
(图片来源网络,侵删)

代码示例:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">获取当前时间 - EL方式</title>
</head>
<body>
    <h1>使用 EL 表达式获取当前时间</h1>
    <p>当前完整时间: ${pageContext.request.session.application.now}</p>
    <p>更灵活的方式(使用 JSTL):</p>
    <p>完整时间: <fmt:formatDate value="${pageContext.session.creationTime}" pattern="yyyy-MM-dd HH:mm:ss"/></p>
    <p>仅日期: <fmt:formatDate value="${pageContext.session.creationTime}" pattern="yyyy-MM-dd"/></p>
    <p>仅时间: <fmt:formatDate value="${pageContext.session.creationTime}" pattern="HH:mm:ss"/></p>
</body>
</html>

说明:

  • ${pageContext.request.session.application.now} 是 EL 表达式,它会调用 application 对象的 now() 方法来获取一个 java.util.Date 对象。
  • 这种方式虽然简单,但格式化比较麻烦,通常需要配合 JSTL 的 <fmt:formatDate> 标签来格式化日期。
  • 注意:为了使用 JSTL,你需要在 JSP 页面顶部引入标签库:
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

使用 JSTL(JSP Standard Tag Library) - 推荐用于显示

JSTL 是一套标准标签库,可以让你在 JSP 页面中减少 Java 代码的编写,使页面更整洁。<fmt:formatDate> 是专门用于格式化日期的标签。

代码示例:

JSP如何获取当前时间?-图2
(图片来源网络,侵删)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">获取当前时间 - JSTL方式</title>
</head>
<body>
    <h1>使用 JSTL fmt 标签获取当前时间</h1>
    <%
        // 在 JSP 脚本片段中获取当前时间
        java.util.Date now = new java.util.Date();
    %>
    <!-- 使用 JSTL 的 fmt 标签来格式化上面获取的 now 对象 -->
    <p>当前完整时间: <fmt:formatDate value="<%= now %>" pattern="yyyy年MM月dd日 HH时mm分ss秒"/></p>
    <p>其他格式示例:</p>
    <p>标准格式: <fmt:formatDate value="<%= now %>" type="both"/></p>
    <p>仅日期: <fmt:formatDate value="<%= now %>" type="date"/></p>
    <p>仅时间: <fmt:formatDate value="<%= now %>" type="time"/></p>
</body>
</html>

说明:

  • 我们首先在 JSP 的脚本片段 <% ... %> 中用 Java 代码 new java.util.Date() 获取了当前时间对象。
  • 然后使用 <fmt:formatDate> 标签的 value 属性接收这个日期对象,并用 pattern 属性定义显示的格式。
  • pattern 中的常用占位符:
    • yyyy: 四位年份 (e.g., 2025)
    • MM: 两位月份 (01-12)
    • dd: 两位日期 (01-31)
    • HH: 24小时制的小时 (00-23)
    • mm: 分钟 (00-59)
    • ss: 秒 (00-59)
  • 这是在 JSP 页面中显示时间的最佳实践,因为它将逻辑(获取时间)和表现(格式化显示)清晰地分离开来。

在 Java 代码中获取(在 Servlet 或后台逻辑中)

如果你需要在业务逻辑中处理时间(比如存入数据库、进行计算等),应该在 Servlet 或 JavaBean 的后端代码中获取,而不是在 JSP 视图层。

示例(在 Servlet 中):

import java.io.IOException;
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;
@WebServlet("/TimeServlet")
public class TimeServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1. 在后端获取当前时间
        Date currentTime = new Date();
        // 2. 可以进行一些业务逻辑处理,比如格式化
        // ... 
        // 3. 将时间对象存入 request 作用域,传递给 JSP 页面
        request.setAttribute("serverTime", currentTime);
        // 4. 转发到 JSP 页面进行显示
        request.getRequestDispatcher("/showTime.jsp").forward(request, response);
    }
}

对应的 JSP 页面 (showTime.jsp):

JSP如何获取当前时间?-图3
(图片来源网络,侵删)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">显示后端传递的时间</title>
</head>
<body>
    <h1>从 Servlet 传递过来的时间</h1>
    <!-- 直接从 request 作用域中获取并显示 -->
    <p>服务器当前时间: <fmt:formatDate value="${serverTime}" pattern="yyyy-MM-dd HH:mm:ss"/></p>
</body>
</html>

说明:

  • 这是最规范、最推荐的方式,遵循了 MVC(Model-View-Controller)设计模式。
  • Controller (Servlet): 负责获取数据(时间)和处理业务逻辑。
  • Model (JavaBean/数据): 时间数据本身。
  • View (JSP): 只负责展示数据,不包含任何业务逻辑。
  • 这种方式使代码更易于维护、测试和重用。

总结与推荐

方法 优点 缺点 适用场景
EL 表达式 书写极其简单 格式化能力弱,不够灵活 快速原型、简单的页面展示
JSTL 标签 页面整洁,格式化功能强大,符合 MVC 思想 需要引入 JSTL 库 JSP 页面显示时间的首选方式
Java 代码 (Servlet) 逻辑清晰,与业务逻辑结合紧密,可维护性高 需要创建 Servlet,步骤稍多 所有需要后台处理时间的正式项目

最终建议:

  • 如果只是在 JSP 页面上显示一个格式化的时间,请使用 JSTL 的 <fmt:formatDate>
  • 如果你的时间需要用于业务逻辑(如计算、存储),请在 Servlet 或后端 Java 类 中获取,然后通过 request.setAttribute() 传递给 JSP 页面进行显示,这是最专业、最健壮的做法。
分享:
扫描分享到社交APP
上一篇
下一篇