如何用模式格式化java.time.LocalDateTime和java.time.LocalDate?

mem*_*und 6 java jasper-reports java-time

在下面的剪辑中,属性$F是类java.time.LocalDateTimejava.time.LocalDate.

<textField pattern="EE. dd.MM.yyyy">
    <reportElement...>
    </reportElement>
    <textFieldExpression><![CDATA[$F{theLocalDateTime}]]></textFieldExpression>
</textField>
Run Code Online (Sandbox Code Playgroud)

如何pattern在jasper报告中使用textField格式化此属性 ?

Pet*_*erg 7

要在日期/时间对象的当前版本的jasper-report中使用pattern属性,您需要一个java.util.Date类或其中一个子类.

解决方案是转换java.time.LocalDatejava.time.LocalDateTime

转换为 java.util.Date

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

转换为 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>
Run Code Online (Sandbox Code Playgroud)

java.time.LocalDateTime

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

注意:应用模式始终是首选解决方案,特别是在导出到excel时,因为正确的类将传递给poi(因此excel会将列识别为日期并应用与模式中相同的格式)


归档时间:

查看次数:

2766 次

最近记录:

8 年,8 月 前