【问题标题】:How to get default value expression for java.sql.Timestamp in input control如何在输入控件中获取 java.sql.Timestamp 的默认值表达式
【发布时间】:2020-01-01 09:46:03
【问题描述】:

我需要为我的日期时间输入控件设置默认值表达式,并使用 class= java.sql.Timestamp

如果使用java.util.Date,它可以像DATE(2019,8,28) 那样轻松完成,但它只返回日期。

如何使用 class= java.sql.Timestamp 将默认值表达式表示为具有日期和时间,使其具有日期和时间?

报告执行时,它应该在默认输入控件上显示正确的日期和时间。

【问题讨论】:

    标签: datetime jasper-reports


    【解决方案1】:

    您使用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 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2021-11-05
      相关资源
      最近更新 更多