JSP页面中如何给premiumPaidToDate.time增加10天并显示下一个付款日期
嗨,我来帮你搞定这个需求!在JSP里给日期加10天其实有几种简单的实现方式,我给你列两个最常用的:
方法一:用传统的Calendar类(兼容所有Java版本)
这种方法不需要依赖Java 8+的新API,兼容性拉满。核心思路是把现有的Date对象转成Calendar,然后调用add方法添加天数,最后再格式化输出:
<%-- 1. 把已付到期日的Date对象赋值给Calendar实例 --%> <c:set var="nextPaymentCal" value="${premiumPaidToDate.time}" type="java.util.Date" /> <jsp:useBean id="nextPaymentCal" class="java.util.Calendar" scope="page" /> <%-- 2. 给Calendar添加10天(注意add方法返回void,用临时变量接收避免页面输出空值) --%> <c:set var="temp" value="${nextPaymentCal.add(java.util.Calendar.DATE, 10)}" /> <%-- 3. 分别输出原日期和计算后的下一个付款日 --%> <li>Paid Due Date: <fmt:formatDate value="${premiumPaidToDate.time}" pattern="dd/MM/yyyy"/></li> <li>Next Payment Date: <fmt:formatDate value="${nextPaymentCal.time}" pattern="dd/MM/yyyy"/></li>
我给你解释下这段代码:
- 先用
<c:set>把premiumPaidToDate.time这个Date对象赋值给nextPaymentCal,再用<jsp:useBean>把它转成Calendar类型。 - 调用
Calendar.add(Calendar.DATE, 10)来加10天,因为这个方法没有返回值,所以用一个临时的temp变量接收结果,防止页面上输出多余的null。 - 最后用
fmt:formatDate格式化Calendar的time属性(也就是Date对象)输出即可。
方法二:用Java 8+的新时间API(更简洁)
如果你的项目用的是Java 8或更高版本,推荐用LocalDate这种更简洁的时间类,代码会更清爽:
<%-- 1. 把Date对象转成LocalDate(适配系统默认时区) --%> <c:set var="paidToLocalDate" value="${premiumPaidToDate.time.toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDate()}" /> <%-- 2. 直接添加10天 --%> <c:set var="nextPaymentDate" value="${paidToLocalDate.plusDays(10)}" /> <%-- 3. 输出两个日期 --%> <li>Paid Due Date: <fmt:formatDate value="${premiumPaidToDate.time}" pattern="dd/MM/yyyy"/></li> <li>Next Payment Date: <fmt:formatDate value="${nextPaymentDate}" pattern="dd/MM/yyyy"/></li>
⚠️ 注意:如果你的JSTL版本比较旧(低于1.2.1),fmt:formatDate可能不支持直接格式化LocalDate,这时候你可以把LocalDate再转成Date:
<c:set var="nextPaymentDateObj" value="${java.util.Date.from(nextPaymentDate.atStartOfDay(java.time.ZoneId.systemDefault()).toInstant())}" /> <fmt:formatDate value="${nextPaymentDateObj}" pattern="dd/MM/yyyy"/>
小提醒
如果你的项目是MVC架构(比如用Spring MVC),其实更推荐在后端的Service或者Controller里计算好nextPaymentDate,然后把这个值传到JSP页面,这样JSP只负责展示逻辑,代码会更清晰易维护哦!




