JasperReport中DATEFORMAT函数年份显示异常问题求助
JasperReports 6.20.6/6.21.3 日期年份显示错误问题解决
问题根源
你遇到的年份显示错误,核心原因是日期格式符的使用错误:
- 你在
DATEFORMAT中使用的YYYY是基于周的年份(周年),遵循ISO周历规则:每年的第一周必须包含至少4天,且周一起始。2024年12月30日、31日属于2025年的第一周,因此YYYY会返回2025。 - JasperReports 6.17.0版本未严格遵循ISO周年份的解析逻辑,所以未触发该问题;而6.20.6/6.21.3版本修复了格式符解析规则,严格对齐标准,导致问题显现。
解决方案
将日期格式化表达式中的YYYY替换为yyyy:
yyyy代表公历日历年份,会返回日期所属的实际公历年份,不受周历规则影响。
修改前后对比
原表达式:
DATEFORMAT($F{DATA}, "dd.MM.YYYY" )
修改后表达式:
DATEFORMAT($F{DATA}, "dd.MM.yyyy" )
完整修改后的文本框配置
<textField textAdjust="StretchHeight" isBlankWhenNull="true"> <reportElement stretchType="ContainerHeight" x="0" y="0" width="80" height="13" uuid="fb807b5f-1141-45cc-a795-0625b8e88112"> <property name="com.jaspersoft.studio.unit.leftIndent" value="px"/> <property name="com.jaspersoft.studio.unit.rightIndent" value="px"/> </reportElement> <textElement textAlignment="Center" verticalAlignment="Top" markup="none"> <font fontName="Times New Roman" size="10"/> <paragraph leftIndent="2" rightIndent="2"/> </textElement> <textFieldExpression><![CDATA[DATEFORMAT($F{DATA}, "dd.MM.yyyy" )]]></textFieldExpression> </textField>
内容的提问来源于stack exchange,提问作者Altiy Zemlytskiy
相关产品推荐
相关产品推荐

