gpt4 book ai didi

java - 比较同一时区的java Date与sql TIMESTAMP

转载 作者:行者123 更新时间:2023-11-29 09:14:55 26 4
gpt4 key购买 nike

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

选项是数据库中包含时间属性的表(定义:TIMESTAMP(6) WITH TIME ZONE. 在 oracle 中)。每个选项都有他的时区。

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

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

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

我试着让他们在格林威治标准时间,所以我可以让他们在同一个基地,像这样:

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

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

所以,我需要让它们处于同一时区。我怎样才能在 SQL 命令(或其他解决方案)中获得它?

最佳答案

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

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

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

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

由于 DateTimestamp 数据类型中没有任何时区信息,您实际上不必关心时区与 DB 值的匹配,只要:

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

只要您只需要将您的 Java Date 对象与 DB 值相匹配,您应该没问题,无需任何转换。

另外,请查看这篇关于该主题的综合文章:[How To] Handle Oracle TimeStamp with TimeZone from Java

关于java - 比较同一时区的java Date与sql TIMESTAMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10070497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com