相关疑难解决方法(0)

SQL DATE与java.sql.Date中的时区

我对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

  • 我发现这对SQLite来说是假的(它实际上没有真正的DATE数据类型)
  • 当使用java.sql.Timestamp而不是使用时,所有这些都是无关紧要的 …

java sql timezone date jdbc

37
推荐指数
4
解决办法
4万
查看次数

标签 统计

date ×1

java ×1

jdbc ×1

sql ×1

timezone ×1