Sorting 如何对作为字符串的日期字段进行排序
我在生成按日期排序的jasper报告时遇到问题,因为日期是字符串 我已将字符串日期转换为Java日期,但对排序感到困惑。生成的报告仍然没有排序Sorting 如何对作为字符串的日期字段进行排序,sorting,jasper-reports,Sorting,Jasper Reports,我在生成按日期排序的jasper报告时遇到问题,因为日期是字符串 我已将字符串日期转换为Java日期,但对排序感到困惑。生成的报告仍然没有排序 <field name="DEF" class="java.lang.String"/> <sortField name="DEF"/> <textField> <reportElement x="480" y="0" width="85" height="20" uuid="dcfb14be-5d9b-4
<field name="DEF" class="java.lang.String"/>
<sortField name="DEF"/>
<textField>
<reportElement x="480" y="0" width="85" height="20" uuid="dcfb14be-5d9b-4d0e-9565-c4f290064faa">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="06d913e9-5da9-44c8-8111-91150d16384d"/>
</reportElement>
<textElement>
<font fontName="Lucida Bright"/>
</textElement>
<textFieldExpression><![CDATA[new java.text.SimpleDateFormat("dd MMM yy").format(new java.text.SimpleDateFormat("dd-MMM-yy").parse((($F{DEF} != null && $F{DEF}.length() == 9) ? $F{DEF}.replace(" ", "-") : "")))]]></textFieldExpression>
</textField>
在您的情况下,您需要根据可变的排序类型进行排序
java.util.Date
(假设字符串格式为“ddMMM yy”)
仅供参考,诸如和
java.text.simpleDataFormat
等非常麻烦的日期时间类现在被内置在Java8和更高版本中的类所取代。请参阅。如果数据来自数据库,通常(a)将该字段保留为SQL日期字段,并(b)在SQL语句中放置一个ORDER BY
子句。如果您可以使用SQL强制查询数据,那么这也会起作用。通过首先转换为对象而使用Java对字符串进行排序似乎是一个麻烦的解决方法。感谢@Petter的回复。但我已经试过了。报告有错误。下面是对我有用的答案
是,没有将其强制转换为Date,它给出了错误,因为日期变量类型是Date,而new java.text.SimpleDataFormat(“dd MMM yy”).parse($F{DEF})返回字符串。@Tabani解决方案是按变量排序,当然,如果数据不符合dd-MM-yyyy的要求,您需要调整模式。您的数据的格式如下this@Tabani我已经编辑了帖子,我相信你的模式是“dd-MMM-yy”,没有必要做你正在做的所有解析
<variable name="date" class="java.util.Date">
<variableExpression><![CDATA[new java.text.SimpleDateFormat("dd MMM yy").parse($F{DEF})]]></variableExpression>
</variable>
<sortField name="date" type="Variable"/>