Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como converter o formato Oracle Date para Java?

tl;dr


Não, você não.
  • Bancos de dados como o Oracle armazenam valores de data e hora com seus próprios valores binários definidos internamente, não como texto simples.
  • Oracle DATE tipo contém uma hora do dia, bem como uma data.

DATE =data + hora do dia


O DATE tipo no banco de dados Oracle está com nome incorreto. Ele contém mais de uma data (ano, mês e dia do mês).

Esse tipo representa uma data com hora do dia resolvendo em segundos inteiros. Esse tipo não tem o contexto de um fuso horário ou deslocamento de UTC. Portanto, esse tipo não pode ser usado para representar um momento, um ponto específico na linha do tempo. (Para rastrear um momento, use o tipo Oracle TIMESTAMP WITH TIME ZONE .)

Observe que essa nomenclatura Oracle difere do padrão SQL. No padrão, um DATE type é um valor somente de data, sem hora do dia e sem fuso horário ou deslocamento.

java.time.LocalDateTime


Portanto, esse tipo mapeia para LocalDateTime em Java.

Recuperação.
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;

Armazenar.
myPreparedStatement.setObject( … , ldt ) ;

Texto


Observe que no código acima estamos usando objetos inteligentes em vez de strings burras.

Objetos de data e hora, como LocalDateTime não são String e não segure o texto. Eles representam internamente seu valor à sua maneira. Você pode analisar uma string como um objeto de data e hora e pode solicitar que o objeto de data e hora gere texto. Mas o texto e o objeto de data e hora são separados e distintos.

O java.time as classes usam o padrão ISO 8601 formatos ao analisar/gerar strings.
String output = ldt.toString() ;

Análise.

Você pode gerar texto em outros formatos. Você pode especificar seu próprio formato personalizado chamando DateTimeFormatter.ofPattern . Geralmente é melhor formatar automaticamente chamando DateTimeFormatter.ofLocalized… métodos.

Isso já foi abordado muitas e muitas vezes no Stack Overflow. Então pesquise para saber mais.
LocalDateTime ldt = LocalDateTime.parse( "2020-01-23T01:23:45.123456789" ) ;

Sobre java.time


O java.time framework é construído em Java 8 e posterior. Essas classes substituem o antigo e problemático legado classes de data e hora, como java.util.Date , Calendar , &SimpleDateFormat .

Para saber mais, consulte o Tutorial do Oracle . E pesquise no Stack Overflow muitos exemplos e explicações. A especificação é JSR 310 .

O Joda-Time projeto, agora em modo de manutenção , aconselha a migração para o java.time Aulas.

Você pode trocar java.time objetos diretamente com seu banco de dados. Use um driver JDBC compatível com JDBC 4.2 ou mais tarde. Não há necessidade de strings, não há necessidade de java.sql.* Aulas. Suporte para Hibernate 5 e JPA 2.2 java.time .

Onde obter as classes java.time?