你并不需要为这个变量,直接使用的textFieldExpression
如果字段MO_DATECREATED
和MO_DATECOMPLETED
被宣布为:
as 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
对象,只需使用pattern属性即可。
编辑:用户已经选择了java.util.Date
,问他怎么也显示分钟,为了这个,我已经创建了一个一般性的问题上How to create a single expression displaying time difference between two Date's as years, months, days, hours, minutes, seconds,现在是answered
这是治标不治本
<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>
MO_DATECRE和MO_DATECOMP是什么类? java.lang.Date或java.lang.String ?? –
目前的表达类是** java.lang.String ** – Ashton
好吧会发布你的答案...为什么不日期???? –