2016-08-08 6 views
3

В следующем отрезаны имущество $F имеет класс java.time.LocalDateTime или java.time.LocalDate.Как форматировать java.time.LocalDateTime и java.time.LocalDate с шаблоном?

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

Как форматировать этот объект недвижимости с TextField pattern в отчетах яшмы?

+2

При регулярном форматировщиком, как показано здесь http://stackoverflow.com/a/ 15817417/1743880, но для Java 8? Будет «DateTimeFormatter.ofPattern (myPattern) .format ($ F {thedatetime})'. – Tunaki

+0

@Tunaki в этом случае пользователю нравится использовать шаблон, который также предпочтительнее при экспорте в разные форматы (следовательно, правильный формат в excel и т. Д.), Шаблон может использоваться в объектах java.util.Date, поэтому решение заключается в преобразовании поле для такого класса (или подкласса) и дождитесь, пока jasper-отчеты обновят свою библиотеку, чтобы также поддерживать форматирование с образцами класса LocalDateTime –

ответ

5

Чтобы использовать атрибут шаблона в текущей версии яшмы-отчете для объекта Date/Time вам нужен java.util.Date класса или один из его подклассов.

Решение состоит в том, чтобы преобразовать java.time.LocalDate и java.time.LocalDateTime

Преобразование в java.util.Date

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> 

Converting to java.sql.Timestamp

от java.time.LocalDate

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

от java.time.LocalDateTime

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

Примечание: Применение шаблона всегда предпочтительным решением, особенно когда экспорт в первенствует, так как правильный класс будет передан в пои (следовательно первенствует распознает столбец в качестве даты и применить такое же форматирование, как и в рисунка)

Смежные вопросы