在JSTL获得下个月和上个月的第一天

时间:2015-08-28 15:22:51

标签: jsp date jstl

我必须显示下个月和上个月的第一个日期,有什么方法可以使用JSTL来获取它。纯JSTL是首选。

明天我可以得到如下。

<jsp:useBean id="ourDate" class="java.util.Date"/>
<jsp:setProperty name="ourDate" property="time" value="${ourDate.time + 86400000}"/>
<fmt:formatDate value="${ourDate}" pattern="dd/MM/yyyy"/>

我无法获得一个月的第一天。

1 个答案:

答案 0 :(得分:1)

JSTL只有parseformat日期的标记,而不是操纵日期。你最好的度假胜地是EL(那些${}事物)。从Servlet 3.0 / EL 2.2开始,它也支持JSP中的方法表达式。然后,您可以使用Calendar#set()Calendar#add()方法。没错,这很糟糕,但正如你所要求的那样,纯粹的JSTL&#34;,这是你能得到的最好的。

<jsp:useBean id="firstDayOfMonth" class="java.util.GregorianCalendar">
    ${firstDayOfMonth.set(5,1)}
</jsp:useBean>
<jsp:useBean id="firstDayOfPreviousMonth" class="java.util.GregorianCalendar">
    ${firstDayOfPreviousMonth.set(5,1)}
    ${firstDayOfPreviousMonth.add(2,-1)}
</jsp:useBean>
<jsp:useBean id="firstDayOfNextMonth" class="java.util.GregorianCalendar">
    ${firstDayOfNextMonth.set(5,1)}
    ${firstDayOfNextMonth.add(2,1)}
</jsp:useBean>

(这些表达式仅用于嵌套在<jsp:useBean>内的自我纪录目的,它们可以放在外面,但对于初学者来说可能更容易混淆;第一个参数(5 resp 。2)是常量字段Calendar.DAY_OF_MONTHCalendar.MONTH)的价值

现在您可以通过Calendar#getTime()通常的方式将其显示如下:

<fmt:formatDate value="${firstDayOfMonth.time}" pattern="dd/MM/yyyy"/>
<fmt:formatDate value="${firstDayOfPreviousMonth.time}" pattern="dd/MM/yyyy"/>
<fmt:formatDate value="${firstDayOfNextMonth.time}" pattern="dd/MM/yyyy"/>

如果你还没有使用EL 2.2,那么最好的办法是在servlet中准备它们。