TimeZone может быть легко передан в отчет с помощью кода.Например, с Java:
Map<String, Object> params = new HashMap<>();
params.put(JRParameter.REPORT_TIME_ZONE, TimeZone.getTimeZone("Europe/London"));
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, new JREmptyDataSource());
В случае, если вы попытаетесь изменить REPORT_TIME_ZONE непосредственно на jrxml следующим образом:
<parameter name="REPORT_TIME_ZONE" class="java.util.TimeZone">
<defaultValueExpression><![CDATA[java.util.TimeZone.getTimeZone("Europe/Copenhagen");]]></defaultValueExpression>
</parameter>
youполучит эту ошибку:
Caused by: net.sf.jasperreports.engine.JRException: org.xml.sax.SAXParseException; lineNumber: 10; columnNumber: 14; Error at line 10 char 14: Duplicate declaration of parameter: REPORT_TIME_ZONE
Если вам действительно нужно установить параметр в шаблоне, вы можете использовать этот трюк:
<?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="TimeZone sample" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<variable name="fake" class="java.util.TimeZone">
<variableExpression><![CDATA[java.util.TimeZone.getDefault()]]></variableExpression>
<initialValueExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.put("REPORT_TIME_ZONE", java.util.TimeZone.getTimeZone("Europe/Moscow"))]]> </initialValueExpression>
</variable>
<title>
<band height="60">
<textField>
<reportElement x="0" y="30" width="100" height="30"/>
<textFieldExpression><![CDATA[new Date()]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
В этом примере я изменилзначение параметра через параметры Карта с помощью фиктивной переменной:
$P{REPORT_PARAMETERS_MAP}.put("REPORT_TIME_ZONE", java.util.TimeZone.getTimeZone("Europe/Moscow"))