Conversión entre oracle.sql.TIMESTAMPTZ y clases JDBC estándar para DbUnit
Pregunta
Estoy ejecutando Oracle 10g y tengo columnas con Type_Name
TIMESTAMP(6) WITH TIME ZONE
Cuando se inflan en clases de java, salen como
oracle.sql.TIMESTAMPTZ
Pero DbUnit no puede manejar la conversión de clases específicas de Oracle a cadenas para escribir en XML. Me pregunto si hay alguna forma fácil de convertir (por ejemplo, en mi declaración SELECT) de estas marcas de tiempo específicas de Oracle a algo en java.sql.
Solución
No he tenido que lidiar con este problema exactamente, pero supongo que tenerlo como una cadena desde la consulta SELECT estaría bien.
Puede usar to_char función. Para convertirlo en una cadena. por ejemplo:
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
El programa lo verá como una cadena. TZD
incluye información de la zona horaria (de la que no hay ninguna en este ejemplo)
Más tarde, esto podría luego ser analizado por Java utilizando Clase SimpleDateFormat .
Alternativamente, oracle.sql. La clase TIMESTAMPTZ tiene un método llamado dateValue
que devuelve una clase java.sql.Date
.
Otros consejos
Me gustaría comentar que usar IYYY como formato para el año podría no ser una buena idea a menos que realmente desee obtener el año ISO. Debes usar YYYY en lugar de IYYY.
Intenta ejecutar tu SQL para 31.12.2012 usando
select to_char(timestamp'2012-12-31 00:00:00 +00:00', 'IYYY-MM-DD HH24:MI:SS.FF TZD') as d from dual;
devuelve " 2013-12-31 00: 00: 00.000000000 " que no es el año que se esperaría.