【发布时间】:2018-01-29 13:00:11
【问题描述】:
我有一个模型类,其中包含ZonedDateTime 类型的字段。生成报表数据时显示为:
2017-08-17T16:09:03+03:00[欧洲/基希讷乌]
要格式化该日期,我使用方法setPattern("dd.MM.yyyy"),但没有任何变化。
所有东西都是通过反射生成的,检查来源:
for (Field field : entityClass.getDeclaredFields()) {
String fieldName = field.getName();
if (usedFields.contains(fieldName)) {
field.setAccessible(true);
if(field.getType().isAssignableFrom(Date.class) || field.getType().isAssignableFrom(ZonedDateTime.class)){
report.addColumn(Columns.column(fieldName, fieldName, field.getType()).setPattern("dd.MM.yyyy"));
}else {
report.addColumn(Columns.column(fieldName, fieldName, field.getType()));
}
}
}
生成报告,其中 list 是元素的通用列表。
report
.title(
Components.text("Documents Report")
.setStyle(getHeaderCenteredBoldStyle())
.setHorizontalTextAlignment(HorizontalTextAlignment.CENTER))
.pageFooter(Components.pageXofY())
.setColumnTitleStyle(getColumnTitleStyle())
.highlightDetailEvenRows()
.setDataSource(list);
生成的 PDF
【问题讨论】:
-
实际渲染的作用是什么?仅仅调用
toString()是不够的,您必须格式化您的 dateTimes,并且您的输出看起来与toString()结果完全相同。 -
@M.Prokhorov 检查更新,我该如何格式化。日期。我在 exaples 中找到的只是 setPattern() 方法。检查答案中的更新
-
在我看来,您的
DynamicReports版本不支持java.time库。既然您似乎是通过反射构建它,请尝试使用setPatternExpression方法,在该方法中您将使用正确的格式化程序表达式代码。
标签: java date datetime-format dynamic-reports zoneddatetime