计算时间和日期差异
Calculating Time and Date difference
我目前正在编写一份报告来计算 iReport 中两个日期变量之间的 TotalTimeDifference
。
我比较的两个变量是 MO_DATECREATED
和 MO_DATECOMPLETED
,我正在尝试计算 time 仅差异。
我已经尝试设置一个变量来对两个变量进行简单的减法 - 当然这根本不起作用。
我将附上我目前拥有的照片,但我正在寻找比较两个变量(包含 date/time)并打印出具有时间差异的变量的方法。
示例:如果 MO 是 started at 1/2/15 12:55pm
和 completed at 1/3/15 1:55pm
我想打印时差,或者需要多长时间,如 25 hours
我如何在 iReport 中执行此操作?感谢您帮助新手!
EDIT 回答后,我想秀天:
你不需要变量,直接使用 textFieldExpression
如果声明字段 MO_DATECREATED
和 MO_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"
。
嘿,那是 java 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>
我目前正在编写一份报告来计算 iReport 中两个日期变量之间的 TotalTimeDifference
。
我比较的两个变量是 MO_DATECREATED
和 MO_DATECOMPLETED
,我正在尝试计算 time 仅差异。
我已经尝试设置一个变量来对两个变量进行简单的减法 - 当然这根本不起作用。
我将附上我目前拥有的照片,但我正在寻找比较两个变量(包含 date/time)并打印出具有时间差异的变量的方法。
示例:如果 MO 是 started at 1/2/15 12:55pm
和 completed at 1/3/15 1:55pm
我想打印时差,或者需要多长时间,如 25 hours
我如何在 iReport 中执行此操作?感谢您帮助新手!
EDIT 回答后,我想秀天:
你不需要变量,直接使用 textFieldExpression
如果声明字段 MO_DATECREATED
和 MO_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"
。
嘿,那是 java 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
并询问他如何显示分钟数,为此我在
这是临时解决方案
<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>