使用Java和Spring在Oracle数据库中插入UTC/GMT日期

use*_*512 4 java oracle timezone jdbc spring-jdbc

当我将new Date()对象插入jdbcTemplateOracle数据库时,我可以看到jdbc驱动程序或Spring jdbcTemplate Date使用本地JVM偏移量插入.

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date timeZoneDate = sdf.parse("09-SEP-1987");
Run Code Online (Sandbox Code Playgroud)

例如,当我插入在GMT中创建的Date对象时,如果JVM时区是USA,则将此结果插入到Oracle数据库中的08-SEP-1987中.

Ant*_*ton 20

java.util.DateOracle和Oracle 都不会Date存储时区信息.在您的情况下,Jdbc驱动程序使用JVM时区转换您的日期.您可以使用以下选项之一:

  • 如果您使用的是PreparedStatement,则可以使用setDate(int parameterIndex, Date x, Calendar cal)方法以Calendar UTC时区指定.
  • 春天jdbcTemplate而不是插入Date的对象,插入CalendarUTC时区
  • TimeZone.setDefault(TimeZone.getTimeZone("GMT")) 可以在JVM lvl上设置
  • -Duser.timezone=GMT在JVM启动时使用