在JDBC API中,我可以使用以下
简单地设置UTC时区用于插入或更新
PreparedStatement myPreparedStatement = ...
myPreparedStatement.setTimestamp( 1, myDateTime, Calendar.getInstance( TimeZone.getTimeZone( "UTC" ) ));
查询
ResultSet rs = ...
rs.next();
rs.getTimestamp( 1, Calendar.getInstance( TimeZone.getTimeZone( "UTC" ) ) )
使用Spring JDBC Template ,我需要使用类似的东西进行查询。
对于查询,我没有任何问题,因为可以通过RowMapper访问ResultSet并使用ResultSet以UTC格式传递Calendar实例。但是,对于插入或更新,我只有以下内容。
NamedParameterJdbcTemplate namedParameterJdbcTemplate = ....
SqlParameterSource parameters = new MapSqlParameterSource().addValue("current_timestamp", myDateTime )
namedParameterJdbcTemplate.update(sql, parameters);
问题
有没有办法告诉Spring JDBC模板使用我指定的TimeZone?
我不想使用TimeZone.setDefault(..)
,因为这会影响我们的旧模块。
答案 0 :(得分:0)
设置或存储日期对象时不使用时区。你也不应该。这就是Date对象没有时区的原因。日期只是时间线上的一个点。
时区偏移量由客户端或消费应用程序设置,因此它可以使用正确的偏移量来确定其位置/要求。如果您在日期值中创建了一个偏移量,那么下游消耗该数据的所有内容将始终必须知道该日期已关闭,并且必须手动对其进行说明。随着时间的推移,这会成为巨大的痛苦。
答案 1 :(得分:0)
您可以使用JdbcTemplate
或PreparedStatementCreator
作为参数并设置这些对象的字段元信息的任何PreparedStatementSetter
方法。