jsp页面如何根据当前时间显示上午或下午?jsp获取当前时间显示上午下午
- 虚拟主机
- 2026-06-25
- 6
在JSP(JavaServer Pages)页面中根据当前时间动态显示“上午”或“下午”,核心思路是利用Java后端逻辑获取系统时间,判断其所属时段,并将结果传递给前端展示,以下是几种常见的实现方式及详细说明。
使用JSP Scriptlet(传统方式)
这是最直接的方式,直接在JSP页面中嵌入Java代码,虽然代码简洁,但违反了视图与逻辑分离的最佳实践,仅适用于简单场景或原型开发。
实现步骤:
- 引入 java.util.Date 和 java.util.Calendar 类。
- 创建 Calendar 实例获取当前小时。
- 判断小时数是否小于12。
代码示例:
<%@ page import="java.util.Calendar" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head>时间显示示例</title> </head> <body> <% // 获取当前日历实例 Calendar cal = Calendar.getInstance(); // 获取当前小时(0-23) int hour = cal.get(Calendar.HOUR_OF_DAY); // 判断时段 String timeOfDay = ""; if (hour < 12) { timeOfDay = "上午"; } else { timeOfDay = "下午"; } %> <h1>当前时段:<%= timeOfDay %></h1> </body> </html>
使用JSTL标签库(推荐方式)
JSTL(JSP Standard Tag Library)允许在JSP中使用标签代替Java代码,使页面更整洁,易于维护。

前提条件:
确保项目中引入了JSTL库(如 jstl.jar 和 standard.jar),并在JSP头部声明:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
实现步骤:
- 在JSP中直接使用 <c:set> 或表达式语言(EL)结合自定义函数,或者更简单地,直接在EL中调用Java方法(需配合JSP 2.1+特性或自定义标签)。
- 最通用的纯JSTL做法是结合 <c:choose>
代码示例:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page import="java.util.Calendar" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head>JSTL时间显示</title> </head> <body> <% // 在后台设置一个变量,或者直接在JSP中计算 Calendar cal = Calendar.getInstance(); int hour = cal.get(Calendar.HOUR_OF_DAY); // 将结果存入pageContext,以便EL访问 pageContext.setAttribute("hour", hour); %> <c:set var="timeOfDay" value="下午" /> <c:if test="${hour < 12}"> <c:set var="timeOfDay" value="上午" /> </c:if> <h1>当前时段:<c:out value="${timeOfDay}" /></h1> </body> </html>
使用Servlet控制器(最佳实践)
在MVC架构中,JSP应仅负责展示,逻辑处理应在Servlet或Controller中完成。

实现步骤:
- Servlet层:获取当前时间,判断时段,将结果存入 request 或 session 对象。
- JSP层:通过EL表达式 ${timeOfDay} 直接显示。
Servlet代码片段:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Calendar cal = Calendar.getInstance(); int hour = cal.get(Calendar.HOUR_OF_DAY); String timeOfDay = (hour < 12) ? "上午" : "下午"; request.setAttribute("timeOfDay", timeOfDay); request.getRequestDispatcher("/index.jsp").forward(request, response); }
JSP代码片段:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <body> <h1>当前时段:${timeOfDay}</h1> </body> </html>
| 特性 | Scriptlet方式 | JSTL方式 | Servlet控制器方式 |
|---|---|---|---|
| 代码整洁度 | 低,混合Java代码 | 中,标签清晰 | 高,逻辑与视图分离 |
| 可维护性 | 差,难以调试 | 较好 | 最好,符合MVC规范 |
| 性能 | 无显著差异 | 无显著差异 | 无显著差异 |
| 适用场景 | 简单页面、快速原型 | 中等复杂度页面 | 企业级应用、大型项目 |
注意事项
- 时区问题:Calendar.getInstance() 默认使用服务器所在时区,如果用户位于不同时区,可能需要根据用户时区调整时间判断逻辑。
- 精度问题:上述逻辑基于“小时”判断,若需更精确(如区分“早上”、“中午”、“下午”、“晚上”),可扩展判断条件,
- 0-5: 凌晨
- 6-11: 上午
- 12-17: 下午
- 18-23: 晚上
- 前端替代方案:如果不需要服务器端参与,也可使用JavaScript在客户端获取时间并显示,减少服务器负载。
相关问题与解答
问题1:如果用户希望根据本地浏览器时区显示上午或下午,而不是服务器时间,应该如何实现?
解答:
服务器端获取的时间是服务器时区的时间,可能与用户本地时间不一致,若需显示用户本地时间,应采用前端JavaScript方案:

<script> var now = new Date(); var hour = now.getHours(); var timeOfDay = (hour < 12) ? "上午" : "下午"; document.getElementById("timeDisplay").innerText = "当前时段:" + timeOfDay; </script> <div id="timeDisplay"></div>
这种方式直接读取用户设备的系统时间,确保显示的是用户本地的上午或下午,无需服务器参与计算,且能实时响应时区差异。
问题2:在JSP中如何同时显示具体的时间(如 14:30)和时段(下午)?
解答:
可以结合 SimpleDateFormat 格式化具体时间,并复用时段判断逻辑,以下是Servlet中的示例代码:
Calendar cal = Calendar.getInstance(); int hour = cal.get(Calendar.HOUR_OF_DAY); String timeOfDay = (hour < 12) ? "上午" : "下午"; // 格式化具体时间 SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); String currentTime = sdf.format(cal.getTime()); request.setAttribute("timeOfDay", timeOfDay); request.setAttribute("currentTime", currentTime);
在JSP中通过EL表达式展示:
当前时段:${timeOfDay},具体时间:${currentTime}
这样即可在同一页面中清晰展示时段和精确时间。