Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 如何对作为字符串的日期字段进行排序_Sorting_Jasper Reports - Fatal编程技术网

Sorting 如何对作为字符串的日期字段进行排序

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

我在生成按日期排序的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-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"/>