gpt4 book ai didi

java - 在一行中创建没有时区偏移的日期对象

转载 作者:行者123 更新时间:2023-12-01 23:08:03 25 4
gpt4 key购买 nike

我正在尝试用某种持续时间填充 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(假设我的计算机的时区设置为 +1:30)。我搜索了如何设置时区,我发现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 中将日期的时区全部设置在一行中,以便将其视为一个表达式呢?

最佳答案

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

关于java - 在一行中创建没有时区偏移的日期对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22473359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com