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?
- Java SE 8
, Java SE 9
, Java SE 10
, Java SE 11
và sau này - Một phần của API Java tiêu chuẩn với một triển khai đóng gói.
- Java 9 bổ sung một số tính năng nhỏ và các bản sửa lỗi.
- Java SE 6
và Java SE 7
- Hầu hết java.time chức năng được chuyển ngược sang Java 6 &7 trong ThreeTen-Backport .
- Android
- Các phiên bản triển khai gói Android mới hơn của java.time lớp học.
- Đối với Android cũ hơn (<26), ThreeTenABP dự án điều chỉnh ThreeTen-Backport (đã đề cập ở trên). Xem Cách sử dụng ThreeTenABP… .