Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak przekonwertować format Oracle Date na Javę?

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?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przestaw Oracle z podzapytaniem

  2. Oracle INSERT INTO SELECT(...) Zachowanie wyjątku DUP_VAL_ON_INDEX

  3. Utwórz tabelę Oracle z włączonym automatycznym zatwierdzaniem

  4. ORA-12705:Nie można uzyskać dostępu do plików danych NLS lub nieprawidłowego środowiska

  5. Funkcja odroczonego tworzenia segmentów nie jest włączona (ORA-00439)