Conversão entre oracle.sql.TIMESTAMPTZ e as classes JDBC padrão para DbUnit
Pergunta
Estou executando o Oracle 10g e tem colunas com type_name
TIMESTAMP(6) WITH TIME ZONE
Quando inflado em classes java eles saem como
oracle.sql.TIMESTAMPTZ
Mas DbUnit não pode lidar com a conversão de classes específicas Oracle para Cordas para gravar em XML. Eu estou querendo saber se há alguma maneira fácil para mim para converter (por exemplo, na minha instrução SELECT de alguma forma) a partir destes timestamps a Oracle específicos para algo em java.sql.
Solução
Eu não tive de lidar com este problema exatamente, mas eu presumo que ter que vir através como uma string de consulta SELECT seria ótimo.
Você pode usar o to_char função. Para convertê-lo em uma corda. por exemplo:
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
Este seria, então ser visto por seu programa como uma string. TZD
inclui informação de fuso horário (das quais há nenhum neste exemplo)
Mais tarde, este poderia então ser analisado pelo Java usando o SimpleDateFormat classe.
Como alternativa, o oracle.sql. TIMESTAMPTZ classe tem um método chamado dateValue
que retorna uma classe java.sql.Date
.
Outras dicas
Gostaria de comentar que usando IYYY como formato para o ano pode não ser uma boa idéia a menos que você realmente deseja obter o ano ISO. Você deve usar AAAA em vez de IYYY.
Tente executar o 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;
retorna "2013-12-31 00: 00: 00.000000000" que não é o ano que você esperaria
.