我目前正在编写一份报告来计算 iReport 中两个日期变量之间的TotalTimeDifference
。
我要比较的两个变量是MO_DATECREATED
和MO_DATECOMPLETED
,我只想计算 时间 差异。
我已经尝试设置一个变量来简单地减去这两个变量 - 当然这根本没有用。
我会附上我目前所拥有的照片,但我正在寻找比较两个变量(包含日期/时间)并打印出时间差异变量的方法。
示例:如果MO为started at 1/2/15 12:55pm
和completed at 1/3/15 1:55pm
,我想打印时差或花费的时间,为25 hours
我如何在iReport中执行此操作?谢谢你帮助新手!
编辑回答后,我想在节目时间:
答案 0 :(得分:0)
您不需要变量,直接使用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完全可以理解它的作用,请查看以下内容:How to calculate time difference in java?
为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
并询问他如何显示会议记录,为此我已在How to create a single expression displaying time difference between two Date's as years, months, days, hours, minutes, seconds创建了一般问题,现在{ {3}}
这是临时解决方案
<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>