Oracle DATE比较和时区

时间:2011-11-04 01:33:38

标签: java oracle jdbc

我是Oracle的新手,一直在试图了解Oracle DATE类型的工作方式。

我有一个带有时区信息的Java Date对象。据我所知,Java Date对象被规范化为自1970年1月1日以来的毫秒数。然后,这个Date对象通过JDBC API保存到数据库中。准备好的语句如下所示:

ps.setTimestamp(index,new java.sql.Timestamp.Timestamp(date.getTime()));

这样做是为了捕获日期和时间信息。

与此索引对应的数据库列的类型为oracle DATE。当我将此java.sql.Timestamp.Timestamp对象值存储到Oracle DATE字段时,它是否存储规范化日期(自1970年1月1日以来的毫秒数)?因此,无论数据库位于哪个时区,存储在oracle DATE列中的数据都将是相同的规范化数据,对吗?

如果我要将where子句中的这个DATE列与SYSDATE进行比较,那么在完成比较时,SYSDATE也会被标准化。我不确定如何在oracle中进行比较,因为oracle服务器可能位于不同的时区。

提前致谢。

1 个答案:

答案 0 :(得分:0)

两个DATE值都将被标准化。

当我使用Jython进行简单的Oracle查询时:

rs = c.executeQuery("select sysdate from dual")
while (rs.next()):
    print('%s' % (SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z").format(rs.getTimestamp(1))))

我得到了:

2011-11-04 09:58:00 +0100

当我住在波兰时,我们有'+0100'时区。