将同一时区中的 java Date 与 sql 时间戳进行比较



我需要在userCurrentDate与选项列表之间进行比较。

这些选项是数据库中包含时间属性的表(在 oracle 中定义:带有时区的时间戳(6)。每个选项都有自己的时区。

userCurrentDate(在 java 中定义日期)是一个参数,用于保存用户时间和日期的偏移量。用户可以来自世界各地,因此每个用户都处于不同的时区。

我需要在用户当前日期与选项日期之间进行比较。所以我需要在同一时区获取这两个参数。

如何在 SQL 中在同一时区获取这两个参数?

试图在格林威治标准时间获得它们,这样我就可以将它们放在同一个基地中,如下所示:

trunc(SYS_EXTRACT_UTC(o.time)) = trunc(sysdate)  

但这不是一个好的解决方案。

所以,我需要让他们在同一时区。 如何在SQL命令(或其他解决方案)中获取它?

你为什么认为你需要这种转换?您拥有哪个版本的 Oracle 和 Oracle JDBC?

您是否尝试仅绑定userCurrentDate并执行SQL,如下所示:

connection.prepareStatement("select * from options o where o.time = ?")
    .setTimestamp(1, new Timestamp(userCurrentDate.getTime())
    .executeQuery();

我已经用ojdbc14.jar和Oracle 10g对此进行了测试,它工作正常。

由于DateTimestamp数据类型中没有任何时区信息,因此只要

  1. 您不需要数据库值实际具有特定的时区。当您在类型 TIMESTAMP WITH TIME ZONE 的列中插入某个值时,JDBC 驱动程序使用您的本地时区。
  2. 您不需要在 Java 程序中显示原始时区,因为正如我之前所说Date/Timestamp类型中没有该信息。

只要您只需要将 Java Date 对象与数据库值匹配,就应该可以进行任何转换。

另外,请查看这篇关于该主题的综合文章:[如何]从Java使用时区处理Oracle TimeStamp

我用时区预言机函数解决了这个问题。使用:

to_timestamp_tz(to_char(CAST(FROM_TZ(CAST(sysdate AS TIMESTAMP), 'GMT') AT TIME ZONE o.time AS DATE) 

并相互比较。

相关内容

  • 没有找到相关文章

最新更新