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?
- Java SE 8
, Java SE 9
, Java SE 10
, Java SE 11
a novější - Část standardního Java API s implementací v balíčku.
- Java 9 přidává některé drobné funkce a opravy.
- Java SE 6
a Java SE 7
- Většina z java.time funkčnost je zpětně portována na Java 6 a 7 v ThreeTen-Backport .
- Android
- Pozdější verze implementací balíčku java.time pro Android třídy.
- Pro starší Android (<26), ThreeTenABP projekt přizpůsobuje ThreeTen-Backport (zmíněno výše). Viz Jak používat ThreeTenABP… .