2016-01-07 286 views
1

我目前正在写一份报告,计算的iReportTotalTimeDifference两者之间的日期变量。计算时间和日期差异

两个变量,我比较有MO_DATECREATEDMO_DATECOMPLETED,我想只计算时间差异。

我试图设置一个变量,做一个简单的两个变量的减法 - 当然,根本没有奏效。

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

例子:如果MO是started at 1/2/15 12:55pmcompleted at 1/3/15 1:55pm我要打印的时间差,或者过了多长时间,因为25 hours

我怎么能在iReport的做到这一点?感谢您帮助新手!

My problemMyReport

编辑的答案后,我想展示天:

+0

MO_DATECRE和MO_DATECOMP是什么类? java.lang.Date或java.lang.String ?? –

+0

目前的表达类是** java.lang.String ** – Ashton

+0

好吧会发布你的答案...为什么不日期???? –

回答

0

你并不需要为这个变量,直接使用的textFieldExpression

如果字段MO_DATECREATEDMO_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"

嘿,多数民众赞成正好可以这么理解它做什么检查了这一点: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> 
+0

How我是否可以让我看看小时和分钟? – Ashton

+0

它在java.lang.Date formate和你的Java语句工作!但它只显示几小时 - 显示小时和分钟的数学是多少? – Ashton

+0

我仍然有一个显示小时和分钟的问题 - 谢谢Petter! – Ashton