创建没有TimeZone的Date对象全部在一行中

时间:2014-03-18 07:55:57

标签: java date timezone jasper-reports

我试图在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设置为一行呢?

1 个答案:

答案 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(..)结果存储在参数或变量中,这样就不会在每条记录上创建新对象。