我有以下场景:两台计算机:第一台计算机运行在Windows Vista下,第二台计算机运行在Linux下,两台计算机都连接到Oracle 10g。Oracle 10g正在第二台计算机上运行。
我已经用Java编写了一个使用ojdbc14.jar连接到Oracle的测试程序
这个测试程序只连接到数据库,从特定的表中检索一些数据,并打印日期字段的值。
当在第一台机器中运行程序测试时,我的日期类似于'10/01/1987‘当在第一秒中运行程序测试时,我的日期类似于'09/30/1987’
当我使用plsqldeveloper来显示这个数据时,日期字段看起来像'10/01/1987‘
有人能解释一下为什么吗?
提前感谢
发布于 2009-07-14 15:16:45
在我看来,这是一个时区问题--一台机器设置为美国时间,另一台设置为GMT或UTC?因此,日期相隔一天,但可能具有相同的UTC / long值。
您是否使用Timestamp作为Oracle中的列类型?例如,
...
"created" timestamp(6) not null default systimestamp enable,
...那么使用java.sql.Timestamp呢?例如:
...
Timestamp created = rs.getTimestamp("created");
...发布于 2009-07-14 15:26:57
我认为Oracle可能将日期存储为GMT值。Oracle所做的是正确的,但是当从Oracle数据库中读取值时,您的客户端需要调整到GMT日期。似乎"plsqldeveloper“显示了从Windows机器上查询时的GMT-7调整时间和在Linux机器上查询时的原始GMT。我想说的是Linux机器(或Linux机器上的plsqldeveloper)需要额外的配置来进行GMT调整。
顺便说一句,如果它实际上是一个GMT问题,那么它必须也存储一天中的时间,因为这是GMT-7调整可能显示为一整天休息的唯一方式。所以,我很好奇你们日期上的“一天中的时间”是什么。此外,当您登录到Oracle管理工具并查看其中的日期时,有何不同?(如果你没有Oracle,你可以下载轻量级/快速版,它很容易安装)
发布于 2009-07-30 04:36:39
请确保还检查NLS_DATE_FORMAT设置。
这可以在您的两台计算机之间进行不同的配置或默认设置。
有关更多示例,请参阅此网址:http://www.dba-oracle.com/t_nls_date_format_sysdate.htm
https://stackoverflow.com/questions/1126042
复制相似问题