比较同一时区中的java日期和sql时间戳

比较同一时区中的java日期和sql时间戳,java,sql,timezone,Java,Sql,Timezone,我需要将userCurrentDate与选项列表进行比较 这些选项是数据库中的一个表,其中包含时间属性定义:TIMESTAMP6 WITH time ZONE。在甲骨文中。每个选项都有自己的时区 userCurrentDate定义日期。在java中,是一个参数,用于保存带有偏移量的用户时间和日期。用户可以来自世界各地,因此每个用户都处于不同的时区 我需要比较用户当前日期和选项日期。 所以我需要在同一时区得到这两个参数 在SQL中,如何在同一时区中获取这两个参数 我试着用格林尼治标准时间获取它们,

我需要将userCurrentDate与选项列表进行比较

这些选项是数据库中的一个表,其中包含时间属性定义:TIMESTAMP6 WITH time ZONE。在甲骨文中。每个选项都有自己的时区

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

我需要比较用户当前日期和选项日期。 所以我需要在同一时区得到这两个参数

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

我试着用格林尼治标准时间获取它们,这样我就可以在相同的基础上获取它们,如下所示:

trunc(SYS_EXTRACT_UTC(o.time)) = trunc(sysdate)  
connection.prepareStatement("select * from options o where o.time = ?")
    .setTimestamp(1, new Timestamp(userCurrentDate.getTime())
    .executeQuery();
但这不是一个好的解决方案


所以,我需要让他们在同一时区。如何在SQL命令或其他解决方案中实现这一点?

为什么您认为需要进行此转换?您有什么版本的Oracle和Oracle JDBC

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

trunc(SYS_EXTRACT_UTC(o.time)) = trunc(sysdate)  
connection.prepareStatement("select * from options o where o.time = ?")
    .setTimestamp(1, new Timestamp(userCurrentDate.getTime())
    .executeQuery();
我已经用ojdbc14.jar和Oracle10g对此进行了测试,效果很好

由于日期和时间戳数据类型中没有任何时区信息,因此您实际上不应该关心将时区与DB值匹配,只要:

实际上,不需要DB值就可以有特定的时区。当您在TIMESTAMP WITH TIME ZONE类型的列中插入一些值时,JDBC驱动程序将使用您的本地时区。 您不需要在Java程序中显示原始时区,因为正如我之前所说的,日期/时间戳类型中没有这些信息。 只要您只需要将Java日期对象与DB值匹配,就可以不进行任何转换


另外,请查看这篇关于此主题的综合文章:

您认为为什么需要此转换?您有什么版本的Oracle和Oracle JDBC

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

trunc(SYS_EXTRACT_UTC(o.time)) = trunc(sysdate)  
connection.prepareStatement("select * from options o where o.time = ?")
    .setTimestamp(1, new Timestamp(userCurrentDate.getTime())
    .executeQuery();
我已经用ojdbc14.jar和Oracle10g对此进行了测试,效果很好

由于日期和时间戳数据类型中没有任何时区信息,因此您实际上不应该关心将时区与DB值匹配,只要:

实际上,不需要DB值就可以有特定的时区。当您在TIMESTAMP WITH TIME ZONE类型的列中插入一些值时,JDBC驱动程序将使用您的本地时区。 您不需要在Java程序中显示原始时区,因为正如我之前所说的,日期/时间戳类型中没有这些信息。 只要您只需要将Java日期对象与DB值匹配,就可以不进行任何转换


另外,请查看这篇关于以下主题的综合文章:

我使用at time zone oracle函数解决此问题。 使用:


并相互比较。

我使用at time zone oracle函数解决了此问题。 使用:


并相互比较。

我相信At TIME ZONE函数就是您想要的,正如这里所描述的,请注意日期对象不处理时区。它仅以格林尼治标准时间(GMT)记录自1970年1月1日以来经过的毫秒数。如果您的应用程序中需要一些基于时间的逻辑,您可能需要使用日历。@Grove,请注意我写的useCurrentDate保存用户的时间和日期,并带有offsetI。我相信At time ZONE函数就是您想要的,如这里所述。请注意日期对象不处理时区。它仅以格林尼治标准时间(GMT)记录自1970年1月1日以来经过的毫秒数。如果您的应用程序中需要一些基于时间的逻辑,您可能需要使用日历。@Grove,请注意,我写的useCurrentDate包含用户时间和日期,在我的代码中,它们有时区。这个时区对我的数据库很重要。o、 时间是一个列表,我需要将它们中的每一个进行比较?在我的代码中,它们有时区。这个时区对我的数据库很重要。o、 时间是一张单子,我需要把每一张都和它进行比较?