我试图在JasperReport中使用某种持续时间填充TextField
。该字段的值以毫秒为单位,为了使用户可以读取,我使用Java的Date类和SimpleDateFormat类将其转换为hh:mm:ss
格式,如下所示:
new java.text.SimpleDateFormat("hh:mm:ss").format(new Date($F{milisec}.longValue()))
$F{milisec}
是Double,所以我必须将其转换为long。无论如何,问题是这个表达式的输出添加了我的本地时区。因此,如果字段的值为10000.0
,那么输出将为01:30:10
(假设我的机器的TimeZone设置为+1:30)。我搜索了如何设置TimeZone,然后找到了this post:
SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
isoFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = isoFormat.parse("2010-05-23T09:01:02");
问题是我将使用我的代码作为JasperReport表达式,据我所知,我不允许在那里使用多行。那么如何在一行中将java中的日期TimeZone设置为一行呢?
答案 0 :(得分:3)
您可以使用REPORT_FORMAT_FACTORY内置参数,该参数将为您提供net.sf.jasperreports.engine.util.FormatFactory的默认实现。
你可以做一些像$ P {REPORT_FORMAT_FACTORY} .createDateFormat(“hh:mm:ss”,$ P {REPORT_LOCALE},TimeZone.getTimeZone(“GMT”))。format(new Date($ F {以毫秒为单位} .longValue()))
您还可以将$ P {REPORT_FORMAT_FACTORY} .createDateFormat(..)结果存储在参数或变量中,这样就不会在每条记录上创建新对象。