使用JDBC的Oracle中的日期问题

时间:2009-07-14 15:10:48

标签: datetime jdbc oracle10g

我有以下情况: 两台电脑: 第一台在Windows Vista下运行的计算机,第二台在Linux下运行的计算机,连接到Oracle 10g。 Oracle 10g正在第二台计算机上运行。

我已经用Java编写了一个使用ojdbc14.jar与Oracle连接的测试程序

此测试程序仅连接到数据库,从特定表中检索某些数据并打印日期字段的值。

在第一台机器上运行程序测试时,我的日期类似'10 / 01/1987' 在第一秒运行程序测试时,我的日期类似于'09 / 30/1987'

当我使用plsqldeveloper显示此数据时,日期字段看起来像'10 / 01/1987'

有人可以解释原因吗?

提前致谢

3 个答案:

答案 0 :(得分:1)

对我来说,这似乎是一个时区问题 - 一台机器设置为,例如美国时间,另一台设置为GMT或UTC?因此,日期相隔一天,但可能具有相同的UTC / long值。

您是否在Oracle中使用Timestamp作为列类型? e.g。,;

...
"created" timestamp(6) not null default systimestamp enable,
...

然后使用java.sql.Timestamp? e.g:

...
Timestamp created = rs.getTimestamp("created");
...

答案 1 :(得分:0)

我认为也许Oracle会将日期存储为GMT值。 Oracle正在做的是正确的,但是当从Oracle数据库中读取值时,您的客户需要调整到GMT日期。看来“plsqldeveloper”显示了从Windows框查询时的GMT-7调整时间和查询Linux框时的原始GMT。我会说Linux机箱(或Linux机箱上的plsqldeveloper)需要额外的GMT调整配置。

顺便说一句,如果它确实是一个GMT问题,那么它必须也存储一天中的时间,因为这是GMT-7调整看起来整整一天的唯一方式。 所以,我很好奇你日期的“时间”邮票是什么。此外,当您登录Oracle管理工具并查看其中的日期时,它有何不同? (如果您没有Oracle,可以下载light / express版本并且易于设置)

答案 2 :(得分:0)

请务必检查NLS_DATE_FORMAT设置。

这可以在两台计算机之间进行不同的配置或默认。

有关更多示例,请参阅此网址:http://www.dba-oracle.com/t_nls_date_format_sysdate.htm