0

我需要忽略数据库中超过 10 分钟的记录。但是,数据库服务器与应用服务器位于不同的时区。我试图利用时间戳列值中的时区详细信息,但似乎他们没有将时区详细信息存储在该列值中(设计不好?)。但是,我找到了一种使用查询获取数据库实例信息的方法:

select dbtimezone from dual.

但是,java 中的大多数实现通过名称而不是偏移信息来支持时区。我需要能够将此偏移量准确地转换为时区(EST 等),这样我就不会在我的计算中错过任何与 DST 相关的时间。像这样:

TimeZone dbZone = TimeZone.getTimeZone(10000); // offset is +10000

Calendar cal = Calendar.getInstance(dbZone);
cal.setTime(new Date());

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(dbZone);
Date parsedDate = df.parse(df.format(cal.getTime()));

该计划是将当前客户端/应用程序时间转换为数据库特定时区时间并执行两者之间的差异。

由于某些限制,这无法在查询中完成。请不要让我写查询以获取最新记录等。必须用 Java 完成。

有小费吗?

4

1 回答 1

0

我猜它可能会让你朝着正确的方向前进。您可以尝试以下操作,以便了解与 EST 的偏移量并进行相应的计算:

SELECT TZ_OFFSET('US/Eastern') FROM DUAL;

所以返回 -3:00 意味着现在是 PST 时间。也许你已经尝试过了?

于 2013-03-25T21:15:35.800 回答