【问题标题】:IReport Java Long subtraction incorrect (possibly overflow)IReport Java Long 减法不正确(可能溢出)
【发布时间】:2016-04-06 22:42:14
【问题描述】:

尝试制作 Jasper 报告,但我在使用 Java 的 Date 类时遇到了麻烦。我正在使用 .CSV 文件,所以很遗憾无法使用 SQL 来解决我的问题。

我已将其范围缩小为以下声明:

new Long( 1L * $V{Date2Long} -  1L * $V{Date1Long})

其中 Date2Long 和 Date1Long 是:(两个变量类都是 Date)

new Long($V{Date2}.getTime())
new Long($V{Date1}.getTime())

其中 Date2 和 Date1 是:(两个变量类都是 Long)

new SimpleDateFormat("MM/dd/yyyy HH:mm").parse($F{Date2CSVColumnName})
new SimpleDateFormat("MM/dd/yyyy HH:mm").parse($F{Date1CSVColumnName})

使用日期示例:
日期 2 =“2015 年 5 月 5 日 13:22”
Date1 = "04/28/2015 16:54"

差异应该是 = 6 天 20 小时 28 分钟

使用 java 的 .getTime() 我得到:
Date2 = "1430850120000"
Date1 = "1430258040000"

ProductionDateInMilliseconds - CreateDateInMilliseconds:
我上面的java方程= 58860000(0.68125天)错误
差值应为 = 592080000(6.85 天)

我能做的唯一假设是我在某处犯了溢出错误。但是当我使用的只是多头时,我不明白这是怎么可能的。 IReport 中的 long 是否刚刚中断?

【问题讨论】:

    标签: java jasper-reports


    【解决方案1】:

    我已经尝试过了,iReport 没有任何问题。这是我的 JRXML 文件-

    <?xml version="1.0" encoding="UTF-8"?>
    <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" language="groovy" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="322b2351-0f86-4ebd-9c51-905d97f5d8f8">
        <property name="ireport.zoom" value="1.0"/>
        <property name="ireport.x" value="0"/>
        <property name="ireport.y" value="0"/>
        <parameter name="Date2CSVColumnName" class="java.lang.String" isForPrompting="false">
            <defaultValueExpression><![CDATA["05/05/2015 13:22"]]></defaultValueExpression>
        </parameter>
        <parameter name="Date1CSVColumnName" class="java.lang.String" isForPrompting="false">
            <defaultValueExpression><![CDATA["04/28/2015 16:54"]]></defaultValueExpression>
        </parameter>
        <variable name="Date2" class="java.util.Date">
            <initialValueExpression><![CDATA[new SimpleDateFormat("MM/dd/yyyy HH:mm").parse($P{Date2CSVColumnName})]]></initialValueExpression>
        </variable>
        <variable name="Date1" class="java.util.Date">
            <initialValueExpression><![CDATA[new SimpleDateFormat("MM/dd/yyyy HH:mm").parse($P{Date1CSVColumnName})]]></initialValueExpression>
        </variable>
        <variable name="Date2Long" class="java.lang.Long">
            <variableExpression><![CDATA[]]></variableExpression>
            <initialValueExpression><![CDATA[new Long($V{Date2}.getTime())]]></initialValueExpression>
        </variable>
        <variable name="Date1Long" class="java.lang.Long">
            <variableExpression><![CDATA[]]></variableExpression>
            <initialValueExpression><![CDATA[new Long($V{Date1}.getTime())]]></initialValueExpression>
        </variable>
        <title>
            <band height="138" splitType="Stretch">
                <textField>
                    <reportElement x="101" y="0" width="358" height="22" uuid="16e461b2-4c7a-49c6-802e-9bd66b818ce1"/>
                    <textFieldExpression><![CDATA[$V{Date2}]]></textFieldExpression>
                </textField>
                <textField>
                    <reportElement x="101" y="22" width="358" height="22" uuid="5609ffc9-354c-48ba-bbda-4ef8753875a7"/>
                    <textFieldExpression><![CDATA[$V{Date1}]]></textFieldExpression>
                </textField>
                <textField>
                    <reportElement x="101" y="58" width="358" height="22" uuid="70582d8a-2c68-463a-ad73-6068bd2c58fd"/>
                    <textFieldExpression><![CDATA[$V{Date2Long}]]></textFieldExpression>
                </textField>
                <textField>
                    <reportElement x="101" y="80" width="358" height="22" uuid="e48af180-0bb1-4d19-b908-fa7b1a962f45"/>
                    <textFieldExpression><![CDATA[$V{Date1Long}]]></textFieldExpression>
                </textField>
                <textField>
                    <reportElement x="101" y="116" width="358" height="22" uuid="71ffab1a-f70d-4601-978c-96b73ae0f268"/>
                    <textFieldExpression><![CDATA[new Long( 1L * $V{Date2Long} -  1L * $V{Date1Long})]]></textFieldExpression>
                </textField>
            </band>
        </title>
    </jasperReport>
    

    看看吧。

    【讨论】:

    • 它现在可以工作了......我没有改变任何东西......我昨天试了5个小时。我将假设编译功能被挂断或其他什么,并且计算机重新启动修复了它。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多