我正在尝试执行一个查询,该查询在针对Oracle DB的DATE类型列上具有where子句。
条件读起来像
collectTime BETWEEN TO_DATE('2014-12-14 01:00:00','YYYY-MM-DD HH24:MI:SS') AND
TO_DATE('2014-12-14 03:40:00','YYYY-MM-DD HH24:MI:SS')
现在,如果我使用DriverManager getConnection方法获取连接对象并执行预准备语句,则输出看起来很好。也就是说,当我查看返回的collectTime
列(它返回为java.sql.Timestamp)值时,我会看到传入的两个日期之间的值 - 示例2014-12-14 01:09:00
。
但是,如果通过JDBC数据源(在Weblogic中配置)获取连接对象,则与DATE列对应的列值会以不同方式返回。示例2014-12-13 17:09:00.0
。
我无法理解造成这种差异的原因。所有值似乎都可以通过特定时区进行调整。关于为什么会发生这种情况的任何见解?
我尝试将会话时区设置为UTC,但这并没有任何影响。
答案 0 :(得分:0)
在您的查询中,根据您的喜好格式化日期。如果您不这样做,将使用Weblogic中定义的NLS_DATE格式或正在执行的任何地方返回日期。
完全控制日期返回方式的唯一方法是在查询中指定它,例如
select to_char(sysdate, 'dd-mon-yyyy') from dual;
返回
21-DEC-2014
答案 1 :(得分:0)
这是一个讨论线程,讨论为Weblogic设置时区:link。
它建议将以下内容放入setDomainEnv.cmd文件中,当然还有正确的时区偏移量。
设置JAVA_PROPERTIES = -Duser.timezone =" +05:30" %JAVA_PROPERTIES %% EXTRA_JAVA_PROPERTIES%