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.

Foi útil?

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

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top