2016-08-08 32 views
3

Im folgenden Ausschnitt ist die Eigenschaft $F der Klasse java.time.LocalDateTime oder java.time.LocalDate.Wie formatieren Sie java.time.LocalDateTime und java.time.LocalDate mit Muster?

<textField pattern="EE. dd.MM.yyyy"> 
    <reportElement...> 
    </reportElement> 
    <textFieldExpression><![CDATA[$F{theLocalDateTime}]]></textFieldExpression> 
</textField> 

Wie kann ich diese Eigenschaft Format mit Textfield pattern in Jasper Reports?

+2

Mit einem regelmäßigen Formatierer Poi weitergegeben werden wie hier gezeigt http://stackoverflow.com/a/ 15817417/1743880, aber für Java 8? Wäre 'DateTimeFormatter.ofPattern (myPattern) .format ($ F {thedatetime})'. – Tunaki

+0

@Tunaki in diesem Fall der Benutzer gerne Muster verwenden, das ist auch bevorzugt, wenn Sie in verschiedene Formate exportieren (daher korrektes Format in Excel usw.), kann Muster auf java.util.Date Objekte verwendet werden, so ist die Lösung, die zu konvertieren Feld auf eine solche Klasse (oder Unterklasse) und warten Sie, bis jasper-reports ihre Bibliothek aktualisieren, um auch die Formatierung mit Mustern der LocalDateTime-Klasse zu unterstützen –

Antwort

5

Um das Musterattribut in der aktuellen Version von jasper-report für Date/Time-Objekt zu verwenden, benötigen Sie eine java.util.Date Klasse oder eine ihrer Unterklassen.

Die Lösung ist java.time.LocalDate und java.time.LocalDateTime

-java.util.Date

Converting

from java.time.LocalDate

<textField pattern="EE. dd.MM.yyyy"> 
    <reportElement...> 
    </reportElement> 
    <textFieldExpression><![CDATA[java.util.Date.from($F{theLocalDate}.atStartOfDay(java.time.ZoneId.systemDefault()).toInstant())]]></textFieldExpression> 
</textField> 

from java.time.LocalDateTime

<textField pattern="EE. dd.MM.yyyy"> 
    <reportElement...> 
    </reportElement> 
    <textFieldExpression><![CDATA[java.util.Date.from($F{theLocalDateTime}.atZone(java.time.ZoneId.systemDefault()).toInstant())]]></textFieldExpression> 
</textField> 

012 konvertiert

von java.time.LocalDate

<textField pattern="EE. dd.MM.yyyy"> 
    <reportElement...> 
    </reportElement> 
    <textFieldExpression><![CDATA[java.sql.Timestamp.valueOf($F{theLocalDate}.atStartOfDay())]]></textFieldExpression> 
</textField> 

von java.time.LocalDateTime

<textField pattern="EE. dd.MM.yyyy"> 
    <reportElement...> 
    </reportElement> 
    <textFieldExpression><![CDATA[java.sql.Timestamp.valueOf($F{theLocalDateTime})]]></textFieldExpression> 
</textField> 

Hinweis: Muster Anwendung ist immer vorzuziehen Lösung, speziell wenn zu exportieren excel da wird richtige Klasse ( Excel erkennen Spalte als Datum und gelten gleiche Formatierung wie in Mustern daher)