Java 从JdbcTemplate中的结果集获取日期时间

Java 从JdbcTemplate中的结果集获取日期时间,java,datetime,jdbc,jodatime,jdbctemplate,Java,Datetime,Jdbc,Jodatime,Jdbctemplate,在数据库中,我的列的类型为TIMESTAMP,因此我的类的属性类型为Datetime,如下所示: public void setDiscoveryDate(final DateTime discoveryDtTm) { this.discoveryDtTm = discoveryDtTm; } variant.setDiscoveryDate(rs.getTimestamp("discovery_dt_tm")); 现在,在JdbcTemplate中,我想获得它,因此

在数据库中,我的列的类型为TIMESTAMP,因此我的类的属性类型为Datetime,如下所示:

public void setDiscoveryDate(final DateTime discoveryDtTm) {
        this.discoveryDtTm = discoveryDtTm;
    }
variant.setDiscoveryDate(rs.getTimestamp("discovery_dt_tm"));
现在,在JdbcTemplate中,我想获得它,因此一些代码如下:

public void setDiscoveryDate(final DateTime discoveryDtTm) {
        this.discoveryDtTm = discoveryDtTm;
    }
variant.setDiscoveryDate(rs.getTimestamp("discovery_dt_tm"));
这不起作用,因为get for resultset列我找不到返回DateTime的内容,我只看到了getDate或getTime。请尝试:

variant.setDiscoveryDate(new DateTime(rs.getTimestamp("discovery_dt_tm").getTime()));

这是因为
DateTime
不是标准的Java类型。如果您指的是JodaTime类型,请尝试以下操作:

variant.setDiscoveryDate(
   new DateTime(rs.getTimestamp("discovery_dt_tm").getTime())
);
如果
rs.getTimestamp
返回
null
,则该语句将中断,因此您可能希望将其拆分为较小的语句,并添加对
null
的检查

请注意,这可以简化,因为
DateTime
的构造函数采用
java.util.Date
,而
Timestamp
是以下的子类:

variant.setDiscoveryDate(
   new DateTime(rs.getTimestamp("discovery_dt_tm"))
);
但这也是错误的,因为
Timestamp
类的设计不好(请参阅以获取解释)


请继续使用第一个示例(使用
getTime()

谢谢,因此我们仍然只使用.getTime()并将其传递给新的DateTime,那么到目前为止发生了什么?@BDotA:
Timestamp.getTime()
名称不正确-它返回自1970年1月1日以来的毫秒数,因此包括日期和时间部分。rs.getTimestamp()将从数据库返回原始值,但在JVM的时区内。如果将UTC值存储在数据库中,新的DateTime(rs.getTimestamp())将返回不正确的值-按UTC偏移量进行偏移。这对我使用ResultSet并实现
行映射器的Spring MVC应用程序非常有用。谢谢