Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để chuyển đổi định dạng Ngày của Oracle sang Java?

tl; dr

Không, bạn không.

  • Cơ sở dữ liệu như Oracle lưu trữ các giá trị ngày-giờ bằng các giá trị nhị phân được xác định nội bộ của riêng chúng, không phải dưới dạng văn bản thuần túy.
  • Oracle DATE type lưu giữ thời gian trong ngày cũng như ngày tháng.

DATE =ngày + giờ trong ngày

DATE gõ trong cơ sở dữ liệu Oracle bị đặt tên sai. Nó chứa nhiều hơn một ngày (năm, tháng và ngày trong tháng).

Loại này đại diện cho một ngày với thời gian trong ngày phân giải thành cả giây. Loại này thiếu ngữ cảnh của múi giờ hoặc khoảng thời gian bù từ UTC. Vì vậy không thể dùng loại này để biểu thị một thời điểm, một điểm cụ thể trên dòng thời gian. (Để theo dõi một khoảnh khắc, sử dụng Oracle gõ TIMESTAMP WITH TIME ZONE .)

Lưu ý rằng cách đặt tên Oracle này khác với tiêu chuẩn SQL. Trong tiêu chuẩn, một DATE loại là giá trị chỉ ngày, không có thời gian trong ngày và không có múi giờ hoặc khoảng thời gian bù đắp.

java.time.LocalDateTime

Vì vậy, loại này ánh xạ tới LocalDateTime trong Java.

Truy xuất.

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

Lưu trữ.

myPreparedStatement.setObject( … , ldt ) ;

Văn bản

Lưu ý rằng trong đoạn mã trên, chúng ta đang sử dụng các đối tượng thông minh thay vì các chuỗi câm.

Các đối tượng ngày-giờ như LocalDateTime không phải là String và không giữ văn bản. Họ đại diện bên trong giá trị của họ theo cách riêng của họ. Bạn có thể phân tích cú pháp một chuỗi dưới dạng đối tượng ngày-giờ và bạn có thể yêu cầu đối tượng ngày-giờ tạo văn bản. Nhưng văn bản và đối tượng ngày-giờ tách biệt và riêng biệt.

java.time các lớp sử dụng tiêu chuẩn ISO 8601 các định dạng khi phân tích cú pháp / tạo chuỗi.

String output = ldt.toString() ;

Phân tích cú pháp.

Bạn có thể tạo văn bản ở các định dạng khác. Bạn có thể chỉ định định dạng tùy chỉnh của riêng mình bằng cách gọi DateTimeFormatter.ofPattern . Thường thì tốt hơn nên tự động định dạng bằng cách gọi DateTimeFormatter.ofLocalized… phương pháp.

Điều này đã được đề cập nhiều lần trên Stack Overflow. Vì vậy, hãy tìm kiếm để tìm hiểu thêm.

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

Giới thiệu về java.time

java.time khung công tác được xây dựng trong Java 8 trở lên. Các lớp này thay thế cho kế thừa cũ rắc rối các lớp date-time chẳng hạn như java.util.Date , Calendar & SimpleDateFormat .

Để tìm hiểu thêm, hãy xem Hướng dẫn Oracle . Và tìm kiếm Stack Overflow để có nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310 .

Joda-Time dự án, hiện đang ở chế độ bảo trì , khuyên bạn nên di chuyển sang java.time các lớp học.

Bạn có thể trao đổi java.time đối tượng trực tiếp với cơ sở dữ liệu của bạn. Sử dụng trình điều khiển JDBC tuân thủ JDBC 4.2 hoặc sau đó. Không cần chuỗi, không cần java.sql.* các lớp học. Hỗ trợ Hibernate 5 &JPA 2.2 java.time .

Lấy các lớp java.time ở đâu?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TEMPFILE Chế độ chờ vật lý ngoại tuyến

  2. Truy vấn Oracle để chuyển đổi nhiều cột thành một cột

  3. Oracle SQL Ghép nối các số tuần tự trái phải với số nhận dạng

  4. Oracle lấy số với phạm vi

  5. Tìm ngày bị thiếu bằng SQL