我对SQL DATE数据类型的行为感到有些困惑java.sql.Date.以下语句为例:
select cast(? as date) -- in most databases
select cast(? as date) from dual -- in Oracle
Run Code Online (Sandbox Code Playgroud)
让我们用Java准备并执行该语句
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setDate(1, new java.sql.Date(0)); // GMT 1970-01-01 00:00:00
ResultSet rs = stmt.executeQuery();
rs.next();
// I live in Zurich, which is CET, not GMT. So the following prints -3600000,
// which is CET 1970-01-01 00:00:00
// ... or GMT 1969-12-31 23:00:00
System.out.println(rs.getDate(1).getTime());
Run Code Online (Sandbox Code Playgroud)
换句话说,我绑定到语句的GMT时间戳成为我回来的CET时间戳.添加时区的步骤是什么?为什么?
注意:
我已经观察到这对于任何这些数据库都是如此:
DB2,Derby,H2,HSQLDB,Ingres,MySQL,Oracle,Postgres,SQL Server,Sybase ASE,Sybase SQL Anywhere
DATE数据类型)java.sql.Timestamp而不是使用时,所有这些都是无关紧要的 …