【问题标题】:Oracle DATE Comparison and TimeZonesOracle DATE 比较和时区
【发布时间】:2011-11-04 01:33:38
【问题描述】:

我是 Oracle 的新手,一直在努力理解 Oracle DATE 类型的工作原理。

我有一个带有时区信息的 Java Date 对象。据我了解,Java Date 对象被标准化为自 1970 年 1 月 1 日以来的毫秒数。然后通过 JDBC API 将这个 Date 对象保存到数据库中。准备好的语句看起来像这样:

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 服务器可以位于不同的时区。

提前致谢。

【问题讨论】:

标签: java oracle jdbc


【解决方案1】:

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”时区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多