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?
- Java SE 8
, Java SE 9
, Java SE 10
, Java SE 11
, e posterior - parte da API Java padrão com uma implementação em pacote.
- O Java 9 adiciona alguns pequenos recursos e correções.
- Java SE 6
e Java SE 7
- A maior parte do java.time a funcionalidade é retroportada para Java 6 e 7 em ThreeTen-Backport .
- Android
- Versões posteriores de implementações do pacote Android do java.time aulas.
- Para Android anterior (<26), o ThreeTenABP projeto adapta ThreeTen-Backport (Mencionado acima). Consulte Como usar o ThreeTenABP… .