2017-09-26 3 views
1

私は、時間ベースのレポートを作成するには、時間表現で複数の変数を作成しました:前月の最終日を日付と比較して表示する方法は?

// First of month (Returns 01/09/2017) 
new SimpleDateFormat("MM/dd/yyyy").format(java.util.Date.parse("01/" + MONTH(NOW()) + "/" + YEAR(NOW()))) 

// First of previous month (Returns 01/08/2017) 
new SimpleDateFormat("MM/dd/yyyy").format(java.util.Date.parse("01/" + (MONTH(NOW()) - 1) + "/" + YEAR(NOW()))) 

// Last of month (Returns 30/09/2017) 
new SimpleDateFormat("MM/dd/yyyy").format(java.util.Date.parse(MONTH(NOW()) + "/" + DAYSINMONTH(NOW())+ "/" + YEAR(NOW()))) 

私は今、前の月の最後の日を取得して苦労しています。私は以下のようなことを試しましたが、もちろん、すべての月に同じ日数があるわけではないので、これは正しく機能しません。

// Last of previous month (Returns 30/08/2017) 
new SimpleDateFormat("MM/dd/yyyy").format(java.util.Date.parse(
    (MONTH(NOW()) - 1) 
    + "/" + 
    DAYSINMONTH(NOW()) 
    + "/" + 
    YEAR(NOW()) 
)) 

前月の最後の日を取得する方法はありますか。

参照:http://community.jaspersoft.com/questions/843248/last-day-current-month

+0

私は最近、selectステートメントでSQLの場合を使用してそれを実現しました。しかし、巧妙なソリューションにも関心があります。 – user2663557

答えて

0

私はおそらく、これは、所望の日付に戻りCalendar APIまたは類似を使用し、パラメータとして日付を受け取り、方法でJavaで静的クラスを作成解決しなければならず、これはどのようにJavaでそれを行うCalendar - Get last day of previous month

しかし、楽しみを持っているし、私の友人Tunakiが教えてくれたとして我々はorg.apache.commons.lang.time.DateUtilsに戻っagainを落下する必要がある唯一の碧玉、レポート

我々はカレンダーAPIを使用することはできませんので(それはvoidを返す)を使用することができます。

(日除く)私たちは月に最初のtruncateを呼び出すことができDateUtils使用して、我々はaddDays -1は

DateUtils.addDays(DateUtils.truncate(myDate, Calendar.MONTH),-1); 
(私たちは月の最初の日である場合は-1日は、それは私たちに、前の月の最後の日付を与えます)

jrxml例

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="DateUtil" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f288086f-db4e-451f-bf32-e1cce6311a27"> 
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/> 
    <import value="java.util.Calendar"/> 
    <import value="org.apache.commons.lang.time.DateUtils"/> 
    <parameter name="date" class="java.util.Date"> 
     <defaultValueExpression><![CDATA[new Date()]]></defaultValueExpression> 
    </parameter> 
    <queryString> 
     <![CDATA[]]> 
    </queryString> 
    <title> 
     <band height="20" splitType="Stretch"> 
      <textField pattern="MM/dd/yyyy"> 
       <reportElement x="0" y="0" width="220" height="20" uuid="48878c52-5527-4784-a74a-e2d8df65cc55"/> 
       <textFieldExpression><![CDATA[DateUtils.addDays(DateUtils.truncate($P{date}, Calendar.MONTH),-1)]]></textFieldExpression> 
      </textField> 
     </band> 
    </title> 
</jasperReport> 

出力(私はこの答えを渡さ日)

result

デザインノート:私は私の例ではそうであるようにあなたがExcelに例えばエクスポートする場合は、あなたに正しいオブジェクトを与えるパターンを使って、式の中でSimpleDateFormatを使用していない、日付をフォーマットするためにパターンを使用する必要があります。

関連する問題