来自其他位置的数据库的日期与客户端的本地时间之间的差异

时间:2013-03-25 20:50:57

标签: date timestamp

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

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()));

计划是将当前客户端/应用时间转换为DB特定时区时间,并执行两者之间的差异。

由于某些限制,无法在查询中执行此操作。请不要让我写一个查询来获取最新的记录等。必须用Java完成。

任何提示?

1 个答案:

答案 0 :(得分:0)

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

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

因此返回-3:00意味着它是PST时间。也许你已经尝试过了吗?