【问题标题】:Get today's date in JSP and compare it to a Date variable在 JSP 中获取今天的日期并将其与 Date 变量进行比较
【发布时间】:2013-01-29 16:04:24
【问题描述】:

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

下面显示了获取今天的日期/时间,然后在 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>

【问题讨论】:

    标签: jsp date jstl el


    【解决方案1】:

    在 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>
    

    【讨论】:

      【解决方案2】:

      对于初学者,不要混合 Scriptlets 和 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>
      

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

      【讨论】:

      • 您好,关于 scriplets 和 taglibs 的一些很棒的建议!从字面上将其放入 JSP 中,“if”语句中的文本不会显示。我看到你使用了 testdate.time,这个方法是把日期写成时间还是日期/时间?
      • 可能你忘了导入fmt taglib。至于.time,它只是以通常的EL方式调用time getter,就像date.getTime()一样,它返回一个long值,用于比较。
      • 哦,天哪,没有导入 :( 好的,这看起来不错,我喜欢它转换为时间以使其更好的事实。
      【解决方案3】:

      你可以这样做:

      <%@ 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 等不同的选项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        • 2014-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多