【问题标题】:Is there any way to remove time to compare dates only in jasper?有没有办法删除时间来比较碧玉的日期?
【发布时间】:2014-04-20 03:48:04
【问题描述】:

我有两个约会。 第一个是

<field name="duedate" class="java.util.Date"/>

& 秒是当前日期 所以我正在做这样的事情

<![CDATA[ $F{duedate} >= (new java.util.Date()) ? "one" : "two"]]>

如果dueDate 匹配新的java.util.Date() 则不起作用

日期格式似乎也有问题。我正在使用 PostgreSQL 查询来获取日期。 说查询是这样的

    <queryString>select dueDate from table1</queryString>

& 然后我得到这样的字段

<field name="duedate" class="java.util.Date"/>

但是PostgreSQLdueDate o/p 的类型是java.sql.date

所以我声明的字段可以用作 util.date 吗?

【问题讨论】:

    标签: jasper-reports


    【解决方案1】:

    java.util.Date 有它自己的比较方法( compareTo()、after()、before() ),它们也适用于 Jasper。因此,您可以尝试以下方法:

    $F{duedate}.compareTo(new java.util.Date() == 0 ? "one" : "two" 
    

    我现在可能想到的另一个可能的解决方案是在报告的查询中进行比较,如下所示:

    SELECT
    duedate as duedate,
    CASE WHEN duedate == sysdate THEN "one" 
    ELSE "two" END as comparison
    FROM ....
    

    【讨论】:

    • 但这并没有消除我正在寻找的时间。有没有办法从 new java.util.Date() 中删除时间?
    • 标准方法是对 Date 对象应用特定格式: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");日期 dateWithoutTime = sdf.parse(sdf.format(new Date()));您可能会尝试的另一件事是从此日期中获取一个字符串(即:duedate.toString() 和 new java.util.Date().toString()),然后使用 substring 方法仅获取感兴趣的部分。例如,如果到期日期返回字符串“2012/01/20 12:05:10.321”,您可以这样做: String DuedateString = Duedate.substring(0, 10);然后另一个相同,然后比较它们。
    • 这似乎更像是我必须在 jrxml 中执行的 java 编码逻辑......这可以在 jrxml 中完成吗?这是否可取?我也更新了问题...请看看
    • 是的,Java 代码也可以在 jrxml 上运行,并且没有理由不建议使用这种方法,因为 JasperReports 是使用 Java 构建的。如果您使用 iReports 等工具,您也可以轻松地使用它们,它的编辑对话框可以选择使用 Java 方法。您甚至可以使用 EL 来获取隐式调用 java 代码的到期日期 ($F{duedate})。对于数据类型问题,你可以试试这个:java.sql.Date sqlDate = new java.sql.Date(new java.util.Date().getTime());
    猜你喜欢
    • 1970-01-01
    • 2017-10-12
    • 2012-07-22
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多