我要求忽略数据库中超过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完成。
任何提示?
答案 0 :(得分:0)
我猜它可能会让你朝着正确的方向前进。您可以尝试以下操作,以便了解EST的偏移量并进行相应的计算:
SELECT TZ_OFFSET('US/Eastern') FROM DUAL;
因此返回-3:00意味着它是PST时间。也许你已经尝试过了吗?