tl;dr
Nie, nie masz.
- Bazy danych, takie jak Oracle, przechowują wartości daty i godziny z własnymi, wewnętrznie zdefiniowanymi wartościami binarnymi, a nie jako zwykły tekst.
- Oracle
DATE
typ zawiera porę dnia oraz datę.
DATE
=data + pora dnia
DATE
typ w bazie danych Oracle ma błędną nazwę. Zawiera więcej niż datę (rok, miesiąc i dzień miesiąca).
Ten typ reprezentuje datę z porą dnia rozdzieloną na całe sekundy. W tym typie brakuje kontekstu strefy czasowej lub przesunięcia względem czasu UTC. Więc ten typ nie może być użyty do reprezentowania momentu, konkretnego punktu na osi czasu. (Aby śledzić moment, użyj Oracle wpisz TIMESTAMP WITH TIME ZONE
.)
Zauważ, że to nazewnictwo Oracle różni się od standardu SQL. W standardzie DATE
type jest wartością zawierającą tylko datę, bez pory dnia i strefy czasowej lub przesunięcia.
java.time.LocalDateTime
Więc ten typ mapuje do LocalDateTime
w Javie.
Pobieranie.
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
Przechowywanie.
myPreparedStatement.setObject( … , ldt ) ;
Tekst
Zauważ, że w powyższym kodzie używamy inteligentnych obiektów, a nie głupich ciągów.
Obiekty daty i czasu, takie jak LocalDateTime
nie są String
i nie trzymaj tekstu. Wewnętrznie reprezentują swoją wartość na swój własny sposób. Możesz przeanalizować ciąg jako obiekt daty i godziny i poprosić obiekt daty i godziny o wygenerowanie tekstu. Ale tekst i obiekt daty i czasu są oddzielne i odrębne.
java.time zajęcia korzystają ze standardu ISO 8601 formatuje podczas parsowania/generowania ciągów.
String output = ldt.toString() ;
Parsowanie.
Możesz generować tekst w innych formatach. Możesz określić swój własny format, wywołując DateTimeFormatter.ofPattern
. Zwykle lepiej jest automatycznie formatować, wywołując DateTimeFormatter.ofLocalized…
metody.
Zostało to omówione wiele razy już na Stack Overflow. Więc szukaj, aby dowiedzieć się więcej.
LocalDateTime ldt = LocalDateTime.parse( "2020-01-23T01:23:45.123456789" ) ;
O java.time
java.time
Framework jest wbudowany w Javę 8 i nowsze. Te klasy zastępują kłopotliwe stare dziedzictwo
klasy data-godzina, takie jak java.util.Date
, Calendar
, &SimpleDateFormat
.
Aby dowiedzieć się więcej, zapoznaj się z Samouczkiem Oracle . I przeszukaj Stack Overflow, aby znaleźć wiele przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Joda-Time projekt, teraz w trybie konserwacji , zaleca migrację do java.time zajęcia.
Możesz wymienić java.time obiekty bezpośrednio z bazą danych. Użyj sterownika JDBC
zgodny z JDBC 4.2
lub później. Nie potrzeba ciągów, nie potrzeba java.sql.*
zajęcia. Obsługa Hibernate 5 i JPA 2.2 java.time .
Skąd wziąć zajęcia java.time?
- Java SE 8
, Java SE 9
, Java SE 10
, Java SE 11
i nowsze — część standardowego interfejsu Java API z dołączoną implementacją.
- Java 9 dodaje kilka drobnych funkcji i poprawek.
- Java SE 6
i Java SE 7
- Większość java.time funkcjonalność została przeniesiona do Javy 6 i 7 w ThreeTen-Backport .
- Android
- Późniejsze wersje pakietów Androida implementacji java.time zajęcia.
- W przypadku wcześniejszych wersji Androida (<26) ThreeTenABP projekt dostosowuje Backport ThreeTen (wspomniano powyżej). Zobacz Jak korzystać z ThreeTenABP… .