2016-01-07 342 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