非常奇怪我发现我的MSSQL数据库中的JDBI查询为datetimeoffset(4)
类型的列返回了错误的值。在数据库中,我有一行(为了理智,我删除了所有其他行)
ID | Datetimeoffset
------------------------------------
1 | 2016-01-19 22:03:17.0309 -05:00
当我在Java中运行以下内容时,它打印出2016-01-17 22:12:50.7357 -05:00
,这是一个与我的数据库中的值非常不同的时间。我猜测在JDBI中的某个地方,它试图将列值解析为DATETIMEOFFSET
并以某种方式混淆?
此外,当我将检索到的值转换为java.sql.Timestamp
对象并查看毫秒值时,它大约是当前System.currentTimeMillis()
tblDao.getRow(1)
@RegisterMapper(RowMapper.class)
public interface TblDao {
@SqlQuery("SELET ID, Datetimeoffset FROM tbl WHERE ID = :id")
Row getRow(@Bind("id") Long id);
}
public class RowMapper implements ResultSetMapper<Treatment> {
@Override
public Row map(int index, ResultSet resultSet, StatementContext statementContext ) throws SQLException {
Object timestampObj = resultSet.getObject("CreatedDatetimeoffset");
system.println(timestampObj)
答案 0 :(得分:1)
发现此问题是由于SqlServerDriver引起的。在4.0版本的计算机上运行时,查询返回了正确的datetimeoffset
值;版本3.0的计算机返回了错误的值。