计算时间和日期差异

Calculating Time and Date difference

我目前正在编写一份报告来计算 iReport 中两个日期变量之间的 TotalTimeDifference

我比较的两个变量是 MO_DATECREATEDMO_DATECOMPLETED,我正在尝试计算 time 仅差异。

我已经尝试设置一个变量来对两个变量进行简单的减法 - 当然这根本不起作用。

我将附上我目前拥有的照片,但我正在寻找比较两个变量(包含 date/time)并打印出具有时间差异的变量的方法。

示例:如果 MO 是 started at 1/2/15 12:55pmcompleted at 1/3/15 1:55pm 我想打印时差,或者需要多长时间,如 25 hours

我如何在 iReport 中执行此操作?感谢您帮助新手!

EDIT 回答后,我想秀天:

你不需要变量,直接使用 textFieldExpression

如果声明字段 MO_DATECREATEDMO_DATECOMPLETED

作为java.lang.Date

<field name="MO_DATECREATED" class="java.lang.Date">
    <fieldDescription><![CDATA[]]></fieldDescription>
</field>

textFieldExpression 将是 ($F{MO_DATECOMPLETED}.getTime()-$F{MO_DATECREATED}.getTime())/(1000*60*60) + " hours"

嘿,那是 exactly so to understand what it does check out this: How to calculate time difference in java?

as java.lang.String

<field name="MO_DATECREATED" class="java.lang.String">
    <fieldDescription><![CDATA[]]></fieldDescription>
</field>

我们需要首先将它们解析为 Date 对象。您的模式是 mm/dd/yy hh:mm a

(new java.text.SimpleDateFormat("mm/dd/yy hh:mm a").parse($F{MO_DATECOMPLETED}).getTime()-new java.text.SimpleDateFormat("mm/dd/yy hh:mm a").parse($F{MO_DATECREATED}).getTime())/(1000*60*60) + " hours"

考虑到他们可能 null 我们最好也添加一个 printWhenExpression

完成结果

<textField>
     <reportElement x="0" y="0" width="100" height="20" uuid="eac93a84-7901-4205-b09c-556d48dc05e1">
        <printWhenExpression><![CDATA[new java.lang.Boolean($F{MO_DATECREATED}!=null && $F{MO_DATECOMPLETED}!=null)]]></printWhenExpression>
    </reportElement>
    <textFieldExpression><![CDATA[(new java.text.SimpleDateFormat("mm/dd/yy hh:mm a").parse($F{MO_DATECOMPLETED}).getTime()-new java.text.SimpleDateFormat("mm/dd/yy hh:mm a").parse($F{MO_DATECREATED}).getTime())/(1000*60*60) + " hours"]]></textFieldExpression>
</textField>

毫无疑问,它们是 java.lang.Date 对象更好,报告填充速度更快,没有解析错误的风险,您可以正确导出到 excel ecc。要根据需要格式化 java.lang.Date 对象,只需使用模式 属性.

编辑: 用户选择了 java.util.Date 并询问他如何显示分钟数,为此我在 and it is now 上创建了一个一般性问题

这是临时解决方案

<textField>
     <reportElement x="0" y="0" width="100" height="20" uuid="eac93a84-7901-4205-b09c-556d48dc05e1">
        <printWhenExpression><![CDATA[new java.lang.Boolean($F{MO_DATECREATED}!=null && $F{MO_DATECOMPLETED}!=null)]]></printWhenExpression>
    </reportElement>
    <textFieldExpression><![CDATA[($F{MO_DATECOMPLETED}.getTime()-$F{MO_DATECREATED}.getTime()) / (24* 60 * 60 * 1000)  + " days " +($F{MO_DATECOMPLETED}.getTime()-$F{MO_DATECREATED}.getTime()) / (60 * 60 * 1000) % 24 + " hours " +  ($F{MO_DATECOMPLETED}.getTime()-$F{MO_DATECREATED}.getTime()) / (60 * 1000) % 60 + " minutes"]]></textFieldExpression>
</textField>