【发布时间】:2020-01-01 09:46:03
【问题描述】:
我需要为我的日期时间输入控件设置默认值表达式,并使用 class= java.sql.Timestamp
如果使用java.util.Date,它可以像DATE(2019,8,28) 那样轻松完成,但它只返回日期。
如何使用 class= java.sql.Timestamp 将默认值表达式表示为具有日期和时间,使其具有日期和时间?
报告执行时,它应该在默认输入控件上显示正确的日期和时间。
【问题讨论】:
我需要为我的日期时间输入控件设置默认值表达式,并使用 class= java.sql.Timestamp
如果使用java.util.Date,它可以像DATE(2019,8,28) 那样轻松完成,但它只返回日期。
如何使用 class= java.sql.Timestamp 将默认值表达式表示为具有日期和时间,使其具有日期和时间?
报告执行时,它应该在默认输入控件上显示正确的日期和时间。
【问题讨论】:
您使用new java.sql.Timestamp(long time),因为构造函数Timestamp(int year,int month,int date,int hour,int minute,int second,int nano) 已弃用
如果您只喜欢使用 jasper-reports 的 DATE 函数(没有时间),则表达式将是
new java.sql.Timestamp(DATE(2019,8,28).getTime())
getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来构造函数所需的毫秒数
如果您还需要指定时间 jasper-reports 没有功能,我会使用 Java 8(见下文),但是如果这不可行,您可以使用 Timestamp.valueOf,但您需要符合格式 yyyy-[m]m-[d]d hh:mm:ss[.f...]
java.sql.Timestamp.valueOf("2019-01-31 14:12:01")
如果您有其他格式,例如可以解析您的值。
new java.sql.Timestamp(new java.text.SimpleDateFormat("yyyy/MM/dd HH:mm").parse("2019/08/29 12:13").getTime())
如果您喜欢使用 java 8 中引入的 java.time 包(它是线程安全的,可以更清楚地处理时区等),可以使用类似的表达式。
new java.sql.Timestamp(java.time.LocalDate.of(2019, 08, 28).atTime(0,0).atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli())
或者如果您想直接在构造函数中指定时间,请使用LocaDateTime.of
new java.sql.Timestamp(java.time.LocalDateTime.of(2015, 02, 20, 12, 40, 25).atZone(java.time.ZoneId.systemDefault()).toInstant().toEpochMilli())
要了解更多请看java.time api
【讨论】: