sql >> Databáze >  >> RDS >> Oracle

Jak převést formát Oracle Date na Java?

tl;dr

Ne, nemáte.

  • Databáze, jako je Oracle, ukládají hodnoty data a času s vlastními interně definovanými binárními hodnotami, nikoli jako prostý text.
  • Oracle DATE typ obsahuje čas dne i datum.

DATE =datum + denní čas

DATE typ v databázi Oracle je nesprávně pojmenován. Obsahuje více než datum (rok, měsíc a den v měsíci).

Tento typ představuje datum s rozlišením denní doby na celé sekundy. Tento typ postrádá kontext časového pásma nebo offset-from-UTC. Tento typ tedy nelze použít k reprezentaci okamžiku, konkrétního bodu na časové ose. (Chcete-li sledovat okamžik, použijte Oracle typ TIMESTAMP WITH TIME ZONE .)

Všimněte si, že toto pojmenování Oracle se liší od standardu SQL. Ve standardu DATE typ je hodnota pouze pro datum, bez denního času a bez časového pásma nebo posunu.

java.time.LocalDateTime

Tento typ se tedy mapuje na LocalDateTime v Javě.

Načítání.

LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;

Úložiště.

myPreparedStatement.setObject( … , ldt ) ;

Text

Všimněte si, že ve výše uvedeném kódu používáme spíše inteligentní objekty než hloupé řetězce.

Objekty data a času, jako je LocalDateTime nejsou String a nedržte text. Vnitřně představují svou hodnotu svým vlastním způsobem. Řetězec můžete analyzovat jako objekt data a času a můžete objekt data a času požádat, aby vygeneroval text. Ale text a objekt data-čas jsou samostatné a odlišné.

java.time třídy používají standardní ISO 8601 formátů při analýze/generování řetězců.

String output = ldt.toString() ;

Analýza.

Můžete generovat text v jiných formátech. Svůj vlastní formát můžete zadat voláním DateTimeFormatter.ofPattern . Obvykle je lepší automaticky formátovat voláním DateTimeFormatter.ofLocalized… metody.

To už bylo na Stack Overflow probíráno mnohokrát. Takže hledejte a dozvíte se více.

LocalDateTime ldt = LocalDateTime.parse( "2020-01-23T01:23:45.123456789" ) ;

O java.time

java.time framework je zabudován do Javy 8 a novější. Tyto třídy nahrazují staré problematické dědictví třídy podle data a času, jako je java.util.Date , Calendar , &SimpleDateFormat .

Další informace naleznete v Výukovém programu Oracle . A prohledejte Stack Overflow pro mnoho příkladů a vysvětlení. Specifikace je JSR 310 .

Čas Joda projekt, nyní v režimu údržby , doporučuje migraci na java.time třídy.

Můžete si vyměnit java.time objektů přímo s vaší databází. Použijte ovladač JDBC v souladu s JDBC 4.2 nebo později. Není potřeba řetězců, není potřeba java.sql.* třídy. Hibernate 5 a JPA 2.2 podporují java.time .

Kde získat třídy java.time?



  1. Spouští podpora BigQuery okamžitý příkaz ke spuštění dynamického dotazu?

  2. Jak vložit emotikony do MYSQL 5.5 a vyšší pomocí Django ORM

  3. Převod databáze Postgresql z SQL_ASCII obsahující smíšené typy kódování na UTF-8

  4. Jak změnit sloupec z hodnoty Null na hodnotu Not Null na serveru SQL Server