9

我正在尝试在一个基本示例上比较日期,但无法找到最好的方法。

下面显示了获取今天的日期/时间,然后在 IF 语句中进行比较。我确定我硬编码的格式是错误的,但是当输出格式时,它是默认的格式。所以问题是我如何查看一个日期是否低于另一个日期以及如何将它们格式化为仅日期?

<p>
    <c:set var="testme" value="<%=new java.util.Date()%>"/>
    <b><c:out value="${testme}"/></b>
</p>

<c:if test="${testme lt 'Tue Jan 29 16:02:58 GMT 2013'}">
    <p><b><span class="wrap">Test date is less.</span></b></p>
</c:if>
4

3 回答 3

14

对于初学者,不要混合使用Scriptlet和 taglibs/EL。这只是麻烦的秘诀。使用一个或另一个,而不是两者。假设你想继续使用 taglibs/EL,你可以这样做:

<p>
    <jsp:useBean id="today" class="java.util.Date" />
    <b><c:out value="${today}"/></b>
</p>

<fmt:setLocale value="en_US" />
<fmt:parseDate var="testdate" value="Tue Jan 29 16:02:58 GMT 2013" pattern="EEE MMM dd HH:mm:ss z yyyy" />
<c:if test="${today.time gt testdate.time}">
    <p><b><span class="wrap">Test date is less than now.</span></b></p>
</c:if>

请注意,我还修复了变量名称和描述中的一些奇怪的反逻辑。

于 2013-01-29T16:15:09.330 回答
2

在 JSTL 中比较两个日期的代码。首先格式化两个日期,然后使用比较

gt - 大于

lt - 小于

ge - 大于等于

le - 小于等于

<fmt:formatDate var="date_to_comare" value="${date_to_comare_value}" pattern="yyyy-MM-dd HH:mm:ss"/>
<c:set var="today_date" value="<%=new java.util.Date()%>"/>
<fmt:formatDate var="today_formated_date" value="${today}" pattern="yyyy-MM-dd HH:mm:ss"/>  
<c:if test="${date_to_comare lt today_formated_date}">
Write your code here
</c:if>
于 2018-02-26T11:41:54.717 回答
1

你可以这样做:

<%@ taglib  uri = "<pathToLibraries>/fmt.tld" prefix = "fmt" %>

<%------  Do Something between dates ----------%>
<jsp:useBean id="now" class="java.util.Date"/>

<c:set var = "start" value = "30-07-2019" />
<c:set var = "end" value = "24-09-2019" />

<fmt:parseDate value = "${start}" var = "parsedStartDate" pattern = "dd-MM-yyyy" />
<fmt:parseDate value = "${end}" var = "parsedEndDate" pattern = "dd-MM-yyyy" />

<c:if test="${(parsedStartDate le now) && (parsedEndDate ge now)}">
  <%------  Do Something between dates ----------%>
</c:if>

ge, le, gt, lt并且已经讨论了不同的选项等。

于 2019-07-12T22:36:21.217 回答