tl;dr
Tidak, Anda tidak.
- Basis data seperti Oracle menyimpan nilai tanggal-waktu dengan nilai biner yang ditentukan secara internal, bukan sebagai teks biasa.
- Oracle
DATE
type berisi waktu dan tanggal.
DATE
=tanggal + waktu
DATE
ketik dalam database Oracle salah nama. Ini memegang lebih dari satu tanggal (tahun, bulan, dan hari-bulan).
Jenis ini mewakili tanggal dengan penyelesaian waktu menjadi detik penuh. Jenis ini tidak memiliki konteks zona waktu atau offset-dari-UTC. Jadi tipe ini tidak bisa digunakan untuk merepresentasikan suatu momen, titik tertentu pada timeline. (Untuk melacak momen, gunakan Oracle ketik TIMESTAMP WITH TIME ZONE
.)
Perhatikan bahwa penamaan Oracle ini berbeda dari standar SQL. Dalam standar, DATE
type adalah nilai hanya tanggal, tanpa waktu dan tanpa zona waktu atau offset.
java.time.LocalDateTime
Jadi jenis ini dipetakan ke LocalDateTime
di Jawa.
Pengambilan.
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
Penyimpanan.
myPreparedStatement.setObject( … , ldt ) ;
Teks
Perhatikan bahwa dalam kode di atas kita menggunakan objek pintar daripada string bodoh.
Objek tanggal-waktu seperti LocalDateTime
bukan String
dan tidak memegang teks. Mereka secara internal mewakili nilai mereka dengan cara mereka sendiri. Anda dapat mengurai string sebagai objek tanggal-waktu, dan Anda dapat meminta objek tanggal-waktu untuk menghasilkan teks. Tetapi teks dan objek tanggal-waktu terpisah dan berbeda.
java.time kelas menggunakan ISO 8601 standar format saat mengurai/menghasilkan string.
String output = ldt.toString() ;
Penguraian.
Anda dapat menghasilkan teks dalam format lain. Anda dapat menentukan format kustom Anda sendiri dengan memanggil DateTimeFormatter.ofPattern
. Biasanya lebih baik memformat secara otomatis dengan memanggil DateTimeFormatter.ofLocalized…
metode.
Ini telah dibahas berkali-kali di Stack Overflow. Jadi, telusuri untuk mempelajari lebih lanjut.
LocalDateTime ldt = LocalDateTime.parse( "2020-01-23T01:23:45.123456789" ) ;
Tentang java.time
java.time
framework dibangun ke dalam Java 8 dan yang lebih baru. Kelas-kelas ini menggantikan warisan
lama yang merepotkan kelas tanggal-waktu seperti java.util.Date
, Calendar
, &SimpleDateFormat
.
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasinya adalah JSR 310 .
Joda-Time proyek, sekarang dalam mode pemeliharaan , menyarankan migrasi ke java.time kelas.
Anda dapat menukar java.time objek langsung dengan database Anda. Gunakan driver JDBC
sesuai dengan JDBC 4.2
atau nanti. Tidak perlu string, tidak perlu java.sql.*
kelas. Hibernate 5 &JPA 2.2 mendukung java.time .
Di mana mendapatkan kelas Java.time?
- Java SE 8
, Java SE 9
, Java SE 10
, Java SE 11
, dan yang lebih baru - Bagian dari Java API standar dengan implementasi yang dibundel.
- Java 9 menambahkan beberapa fitur dan perbaikan kecil.
- Java SE 6
dan Java SE 7
- Sebagian besar java.time fungsionalitas di-porting kembali ke Java 6 &7 di ThreeTen-Backport .
- Android
- Versi yang lebih baru dari implementasi Android bundle java.time kelas.
- Untuk Android sebelumnya (<26), ThreeTenABP proyek mengadaptasi ThreeTen-Backport (disebutkan di atas). Lihat Cara menggunakan ThreeTenABP… .