Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да конвертирате формата на Oracle Date в Java?

tl;dr

Не, не го правите.

  • Бази данни като Oracle съхраняват стойности за дата-час със собствени вътрешно дефинирани двоични стойности, а не като обикновен текст.
  • Oracle DATE type съдържа час от деня, както и дата.

DATE =дата + час от деня

DATE тип в базата данни на Oracle е погрешно именуван. Съдържа повече от дата (година, месец и ден от месеца).

Този тип представлява дата с час от деня, разрешаващ до цели секунди. Този тип няма контекст на часова зона или отместване спрямо UTC. Така че този тип не може да се използва за представяне на момент, конкретна точка от времевата линия. (За да проследите момент, използвайте тип Oracle TIMESTAMP WITH TIME ZONE .)

Имайте предвид, че това именуване на Oracle се различава от стандарта SQL. В стандарта, DATE type е стойност само за дата, без час от деня и без часова зона или отместване.

java.time.LocalDateTime

Така че този тип съответства на LocalDateTime в Java.

Извличане.

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

Съхранение.

myPreparedStatement.setObject( … , ldt ) ;

Текст

Забележете, че в кода по-горе използваме интелигентни обекти, а не глупави низове.

Обекти за дата-час като LocalDateTime не са String и не задържайте текст. Те вътрешно представят стойността си по свой начин. Можете да анализирате низ като обект за дата-час и можете да поискате от обекта за дата-час да генерира текст. Но текстът и обектът за дата-час са отделни и различни.

java.time класовете използват стандартен ISO 8601 формати при анализиране/генериране на низове.

String output = ldt.toString() ;

Разбор.

Можете да генерирате текст в други формати. Можете да зададете свой собствен персонализиран формат, като извикате DateTimeFormatter.ofPattern . Обикновено е по-добре да форматирате автоматично чрез извикване на DateTimeFormatter.ofLocalized… методи.

Това вече е разгледано много пъти в Stack Overflow. Така че търсете, за да научите повече.

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

Относно java.time

java.time framework е вграден в Java 8 и по-нови версии. Тези класове изместват проблемното старо наследство класове дата-час като java.util.Date , Calendar , &SimpleDateFormat .

За да научите повече, вижте урок за Oracle . И потърсете в Stack Overflow много примери и обяснения. Спецификацията е JSR 310 .

Joda-Time проект, сега в режим на поддръжка , съветва миграция към java.time класове.

Можете да обменяте java.time обекти директно с вашата база данни. Използвайте JDBC драйвер съвместим с JDBC 4.2 или по-късно. Няма нужда от низове, няма нужда от java.sql.* класове. Hibernate 5 и JPA 2.2 поддържат java.time .

Къде да получа класовете 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. Как да представим релационно разделение (основен алгебраичен израз) по отношение на SQL

  2. Как да променя схемата по подразбиране в sql developer?

  3. списък, разделен със запетая

  4. Как да надстроите версията на Java в Oracle 11g 11.2.0.1

  5. Oracle (Oracle?) Joins - инструмент/скрипт за преобразуване?