当我插入new Date()
使用对象jdbcTemplate
到Oracle数据库中,我可以看到,JDBC驱动程序或Spring的JdbcTemplate插入Date
使用本地JVM所抵消。
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date timeZoneDate = sdf.parse("09-SEP-1987");
例如,当我插入GMT创造了这个结果在Oracle数据库中插入08-SEP-1987如果JVM时区是美国的Date对象。
无论是java.util.Date
也不甲骨文Date
存储时区信息。 在你的情况JDBC驱动程序转换使用JVM时区的日期。 您可以使用下列选项之一:
- 如果你正在使用PreparedStatement的,你可以使用
setDate(int parameterIndex, Date x, Calendar cal)
方法来指定Calendar
在UTC时区。 - 春天
jdbcTemplate
而不是插入Date
物件,将Calendar
与UTC
时区 -
TimeZone.setDefault(TimeZone.getTimeZone("GMT"))
可以在JVM LVL设置 - 使用
-Duser.timezone=GMT
在JVM启动
Oracle的DATE
数据类型不具有时区场。 它仅存储日期和时间的组件。 因此,当jdbc
插入一个时区的日期为DATE
数据库字段,它必须决定如何处理即会消失时区信息办。
根据你的情况,似乎jdbc
java的转换Date
的区域设置时区插入之前。 日期09-SEP-1987 00:00:00 UTC
转换为08-SEP-1987 20:00:00 EST
和时区信息被插入下降。
知道了,你可以不插入到时指定一个时区DATE
字段,这样的默认语言环境时区将使用或同时修改默认的时区和Java Date
时区。