在oracle.Sql.TIMESTAMPTZ和DbUnit的标准JDBC类之间进行转换

时间:2008-10-21 19:11:26

标签: sql oracle datetime jdbc dbunit

我正在运行Oracle 10g并且具有Type_Name

的列
TIMESTAMP(6) WITH TIME ZONE

当膨胀成java类时,它们就是

oracle.sql.TIMESTAMPTZ 

但是DbUnit无法处理将Oracle特定类转换为Strings以写入XML。我想知道是否有任何简单的方法可以将这些Oracle特定时间戳转换为(例如,在我的SELECT语句中以某种方式)转换为java.sql中的某些内容。

2 个答案:

答案 0 :(得分:1)

我没有必要完全处理这个问题,但是我认为从SELECT查询中将它作为一个字符串来处理会很好。

您可以使用to_char功能。将其转换为字符串。 e.g:

SQL> select to_char(systimestamp, 'YYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual;

D
----------------------------------
2008-10-21 17:00:43.501591

然后,您的程序会将其视为字符串。 TZD包含时区信息(在此示例中没有)

稍后,Java可以使用SimpleDateFormat类对其进行解析。

或者,oracle.sql.TIMESTAMPTZ类有一个名为dateValue的方法,它返回java.sql.Date类。

答案 1 :(得分:1)

我想说的是,除非你真的想要获得ISO年份,否则使用IYYY作为年份的格式可能不是一个好主意。您应该使用YYYY而不是IYYY。

尝试使用

运行您的SQL for 31.12.2012
select to_char(timestamp'2012-12-31 00:00:00 +00:00', 'IYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual;

返回“2013-12-31 00:00:00.000000000”,这不是您所期望的年份。